SQL使用单引号表示字符串字面值。你的字符串"Mel's Hou Rest, Mel's Lad Rest"
有双引号,这会让Postgres将其解释为带引号的标识符。你可以使用两个单引号来在字符串中包含一个单引号。
SELECT * FROM cust WHERE home_location = ANY(string_to_array("Mel's Hou Rest, Mel's Lad Rest", ','))
SELECT * FROM cust WHERE home_location = ANY(string_to_array('Mel''s Hou Rest, Mel''s Lad Rest', ','))
请注意,
string_to_array
不会移除定界符周围的空格,这可能不符合您的预期。
例如:
=> SELECT string_to_array('foo, bar', ',')
string_to_array
{foo," bar"}
=> select 'foo' = ANY(string_to_array('foo, bar', ','));
?column?
t
=> select 'bar' = ANY(string_to_array('foo, bar', ','));
?column?
f
=> SELECT string_to_array('foo,bar', ',')
string_to_array
{foo,bar}
=> select 'foo' = ANY(string_to_array('foo,bar', ','));
?column?
t
=> select 'bar' = ANY(string_to_array('foo,bar', ','));
?column?
t
当然,在使用查询之前,可以通过规范化输入来抵消这种情况。在某些情况下,可能可以使用
string_to_array(regexp_replace('foo, bar', '\s*,\s', ','), ',')
剥离查询中的空格,但如果没有充分的理由,不要让查询变得更加复杂。