Поисковое слово не является шаблоном. Попробуйте это:
select * from locations where 'Hello from Texas!' like '%' || state || '%';
или это:
select * from locations where 'Hello from Texas!' ~* ('.*' || state || '.*');
, если вы хотите Posix регулярные выражения.
Пример:
# create table locations(id integer, state text);
CREATE TABLE
# insert into locations values (1,'New York'),(2,'Texas') ;
INSERT 0 2
# select * from locations where 'Hello from Texas!' like '%' || state || '%';
id | state
----+-------
2 | Texas
(1 row)
# select * from locations where 'Hello from Texas!' ~* ('.*' || state || '.*');
id | state
----+-------
2 | Texas
(1 row)
# select * from locations where 'Greetings from you ex' like '%' || state || '%';
id | state
----+-------
(0 rows)
# select * from locations where 'Greetings from your ex' ~* ('.*' || state || '.*');
id | state
----+-------
(0 rows)
Это требует некоторого уточнения или курса, если вам нужно определить границы слов:
# select * from locations where 'fakulos greekos metexas' ~* ('.*' || state || '.*');
id | state
----+-------
2 | Texas
Если в ваших поисковых словах есть метасимволы регулярных выражений (см. Документацию PostgresSQL в качестве списка), то вам, возможно, придется сначала заключить их в кавычки. Это выглядит немного странно, но вот как всегда выглядит выход из ситуации:
select regexp_replace('Dont mess (with) Texas, The Lone *',E'([\(\)\*])',E'\\\\\\1','g');
([\(\)\*])
- это список символов, которые вы хотите экранировать.
Однако, если вам никогда не нужны регулярные выражения в ваших поисковых словах, тогда может быть проще использовать простую функцию поиска строк, например strpos ():
select strpos('Dont mess (with) Texas','Texas')>0;
?column?
--------
t
select strpos('Dont mess (with) Texas','Mars')>0;
?column?
--------
f
Вы можете использовать upper()
, если хотите сравнивать без учета регистра
select strpos(upper('Dont mess (with) Texas'),upper('teXas'))>0;
?column?
--------
t