我一直在拔头发。我有一个非常简单的postgre数据库,一个特定的表有一个名为lName(大写N)的列。现在我知道postgre我必须引用lName,因为它包含一个大写的N.
我正在尝试使用以下语句查询数据库:
SELECT * FROM employee WHERE “lName”喜欢“史密斯”
但是我收到了这个错误:
警告:pg_query() [function.pg-query]:查询失败: 错误:列“Smith”不存在 在......
这是什么问题?为什么说这个专栏是“史密斯”?
答案 0 :(得分:24)
我猜:
SELECT * FROM employee WHERE "lName" LIKE 'Smith'
(请注意不同的引号; "foo"
是带引号的标识符; 'foo'
是字符串文字)
此外,在大多数SQL方言中,没有通配符的LIKE
等同于=
;你的意思是包括一个通配符吗?
答案 1 :(得分:4)
因为"Smith"
是标识符,并且在该位置,标识符应该是列。您可能想要的是一个字符串文字,它使用单引号:'Smith'
。所以
SELECT * FROM employee WHERE "lName" LIKE 'Smith'
您可能还希望字符串中的通配符搜索('Smith%'
?)。与典型的正则表达式匹配不同,LIKE
匹配锚定到字符串的开头和结尾。