gpt4 book ai didi

sql - 在 WHERE 子句中使用带有 LIKE 的参数化 SQL(Pervasive SQL)

转载 作者:行者123 更新时间:2023-12-05 00:43:20 26 4
gpt4 key购买 nike

我有一个使用 C++ 连接到的 Pervasive 数据库。
到目前为止我所有的查询都是参数化的,即 "SELECT USER.NAME FROM USER WHERE USER.ID = ?" ,
这工作正常。
但是在搜索查询中,我在 WHERE 子句中使用了 LIKE,然后似乎我不能使用参数和通配符 (%)。

我的查询看起来像这样 "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"并且由于参数 ?-mark 周围有两个 ',因此失败,它搜索名称中带有 ?-mark 的狗。在 SQL Server 中,这可能可以通过连接像 "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'" 这样的字符串来解决。 ,但这在 Pervasive 中是无效的语法(参见本页底部:http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html)。

我还尝试将 % 符号添加到参数本身,但这似乎也不起作用。

有谁知道这个问题的解决方案?

编辑1:
一些 C++ 代码示例:

CString sqlCommand = "SELECT * FROM DOG WHERE DOG.NAME LIKE ?;";
m_pAdoCommand->CommandText = _bstr_t(sqlCommand);
m_pAdoCommand->Parameters->Append( m_pAdoCommand->CreateParameter("p0", adVarChar, adParamInput, 25, _bstr_t("'%bob%'")) );
m_pAdoRecordset = m_pAdoCommand->Execute(NULL,NULL,adCmdText);

( m_pAdoCommand_CommandPtr ,而 m_pAdoRecordset_RecordsetPtr 。我在这个例子中更改了 SQL 表的名称,以便它们在这里有意义。)

上面的代码将返回一行带有名称为 '%bob%' 的狗。 ,但我希望它返回所有名称中包含 bob 的狗。

最佳答案

为什么不在分配给参数的值中添加通配符?

所以,这意味着,您的查询看起来像

SELECT * FROM dog WHERE dog.name LIKE ?

然后,例如,您将值 '%bob%' 分配给该参数。
我看到你说你也试过这个,但它不起作用,这很奇怪。你能展示你所做的代码吗?

我还看到您在其中一个示例中的参数周围加上引号。这听起来不是一个好主意,因为这样参数将不再被识别为参数。那时,它只是一个字符串。

关于sql - 在 WHERE 子句中使用带有 LIKE 的参数化 SQL(Pervasive SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com