Простое выражение Postgresql - имя столбца не существует

Я вырывал свои волосы. У меня очень простая база данных postgre, в одной конкретной таблице есть столбец с именем lName (заглавными буквами N). Теперь я знаю, что с postgre я должен цитировать lName, поскольку он содержит заглавную букву N.

Я пытаюсь запросить базу данных с помощью следующего заявления:

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

Но я получаю эту ошибку:

Предупреждение: pg_query() [function.pg-query]: Запрос не выполнен: ОШИБКА: столбец "Смит" не существует в.....

В чем здесь проблема? Почему говорится, что колонка "Смит"?

Ответ 1

Я бы предположил:

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

(обратите внимание на разные кавычки, "foo" - это цитируемый идентификатор, 'foo' - строковый литерал)

Кроме того, в большинстве диалектов SQL, LIKE без подстановочного знака эквивалентен =; Вы имели в виду подстановочный знак?

Ответ 2

Поскольку "Smith" является идентификатором, и в этой позиции ожидается, что идентификатор будет столбцом. То, что вы, вероятно, имели в виду, это строковый литерал, который использует одинарные кавычки: 'Smith'. Так

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

Вероятно, вы также захотите создать подстановочный знак в строке для поиска ('Smith%'?). LIKE соответствие привязано к началу и концу строки, в отличие от обычного соответствия регулярных выражений.