Простое выражение 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
соответствие привязано к началу и концу строки, в отличие от обычного соответствия регулярных выражений.