Простая инструкция Postgresql — имя столбца не существует

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