【发布时间】:2020-05-08 03:13:55
【问题描述】:
我有一个问题:
SELECT mt.* FROM myTable as mt
WHERE mt."colName" IN ("PM")
它总是返回零行。但是,如果我改变它,使字符串在单引号中:
SELECT mt.* FROM myTable as mt
WHERE mt."colName" IN ('PM')
然后它返回所需的行。
提示:myTable 有一个名为“PM”的列。
因此,如果我在“colName”列中搜索带有字符串“ABC”的行,它将找到行。但是如果我添加一个名为“ABC”的列,那么除非我指定 ('ABC'),否则该查询也会失败。
为什么?
任何答案/解决方案都应考虑到 IN 列表的长度是任意的,并且将包含带有嵌入引号的字符串(单引号和双引号)。
此外,虽然此示例适用于 SQLite,但我的查询也必须适用于 Postgres。
【问题讨论】:
-
"PM"指一列,'PM'是(标准)SQL 中的字符串常量 -
谢谢。我同意我做错了。但是,我仍然不知道如何“正确”地做到这一点。我的 python 代码传递了一个字符串列表,其中一些可能包含单引号。这就是为什么我一直用双引号括起来。那么,这样做的“正确”方法是什么?我生成 WHERE/IN 子句的代码是:``` sqlClause = "WHERE foo IN" + '("' + '","'.join(myList) + '")' ``` 结果:``` WHERE foo IN ("hello'world", "goodbye", ... etc. etc.) ``` 将所有字符串都用双引号括起来,但不适用于嵌入双引号的字符串。
标签: postgresql sqlite where-clause