#php #postgresql #string-constant
#php #postgresql #строка-константа
Вопрос:
Я рвал на себе волосы. У меня есть очень простая база данных postgre, в одной конкретной таблице есть столбец с именем lName (заглавный N). Теперь я знаю, что с помощью postgre я должен заключать lName в кавычки, поскольку оно содержит прописную букву N.
Я пытаюсь запросить базу данных с помощью следующей инструкции:
SELECT *
FROM employee
WHERE "lName" LIKE "Smith"
Но я получаю эту ошибку:
Предупреждение: pg_query() [function.pg-query]: ошибка запроса: столбец «Smith» не существует в …..
В чем здесь проблема? Почему в нем говорится, что столбец «Smith»?
Ответ №1:
Я бы предположил:
SELECT * FROM employee WHERE "lName" LIKE 'Smith'
(обратите внимание на разные кавычки; "foo"
— идентификатор в кавычках; 'foo'
— строковый литерал)
Кроме того, на большинстве диалектов SQL LIKE
без подстановочного знака эквивалентно =
; вы имели в виду включить подстановочный знак?
Ответ №2:
Потому что "Smith"
это идентификатор, и в этой позиции идентификатор, как ожидается, будет столбцом. Вы, вероятно, имели в виду строковый литерал, который использует одинарные кавычки: 'Smith'
. So
SELECT * FROM employee WHERE "lName" LIKE 'Smith'
Вероятно, вам также нужен подстановочный знак в строке для поиска ( 'Smith%'
?). LIKE
сопоставление привязано к началу и концу строки, в отличие от обычного сопоставления с регулярным выражением.