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

标签 sql parameters sql-like pervasive

我有一个使用 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/

相关文章:

mysql - 请优化多连接查询

php - 如何将每个tr的html表数据插入到sql表中

sql - 在 T-SQL 中使用环境变量

javascript - 我如何在这两个函数之间共享参数?

JavaScript 不使用 x.y,其中 y 是变量的名称

mysql - 如果还有针对 id 字段的 AND,最后应用 mysql LIKE 吗?

sql - 在 postgresql 数据库中搜索包含特定单词的字符串

sql - 从数字中删除数字,Sql server

Java - 参数没有按预期传递到函数中

php - 如何使用 mysqli 进行 LIKE 查询并获取所有结果?