14

I've been pulling my hair out. I have a very simple postgre database, one specific table has a column named lName (uppercase N). Now I know with postgre I must quote lName since it contains an uppercase N.

I am trying to query the database with the following statement:

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

But I am receive this error:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: column "Smith" does not exist in .....

What is the issue here? Why is it saying the column is "Smith"?

meenxo
  • 1,176
  • 2
  • 11
  • 12

2 Answers2

33

I would guess:

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

(note the different quotes; "foo" is a quoted identifier; 'foo' is a string literal)

Also, in most SQL dialects, a LIKE without a wildcard is equivalent to =; did you mean to include a wildcard?

Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
5

Because "Smith" is an identifier, and in that position, an identifier is expected to be a column. What you probably meant is a string literal, which uses single quotes: 'Smith'. So

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

You probably also want a wildcard in the string to search for ('Smith%'?). LIKE matching is anchored to the beginning and end of a string, unlike typical regular expression matching.

Peter Eisentraut
  • 35,221
  • 12
  • 85
  • 90