14

我一直在拔头发。我有一个非常简单的 postgre 数据库,一个特定的表有一个名为 lName 的列(大写 N)。现在我知道使用 postgre 我必须引用 lName,因为它包含一个大写的 N。

我正在尝试使用以下语句查询数据库:

SELECT * 
FROM employee 
WHERE "lName" LIKE "Smith"

但我收到此错误:

警告:pg_query() [function.pg-query]:查询失败:错误:列“Smith”不存在于.....

这里有什么问题?为什么说专栏是“史密斯”?

4

2 回答 2

32

我猜:

 SELECT * FROM employee WHERE "lName" LIKE 'Smith'

(注意不同的引号;"foo"是带引号的标识符;'foo'是字符串文字)

此外,在大多数 SQL 方言中,LIKE不带通配符的 a 等价于=; 您的意思是要包含通配符吗?

于 2011-04-27T06:25:01.120 回答
5

因为"Smith"是一个标识符,并且在那个位置,一个标识符应该是一个列。您可能的意思是一个字符串文字,它使用单引号:'Smith'. 所以

SELECT * FROM employee WHERE "lName" LIKE 'Smith'

您可能还希望在字符串中使用通配符来搜索 ( 'Smith%'?)。 LIKE与典型的正则表达式匹配不同,匹配锚定在字符串的开头和结尾。

于 2011-04-27T07:37:40.873 回答