2011-01-12 7 views
0

У меня есть таблица, которая содержит следующие три строкиРегулярные выражения в PostgreSQL

     name      
---------------------------------------------- 
user - help center test 4 [120,2010-08-19] 
test - help center test 2 [123,2010-01-19] 
help center test [20109,2010-01-01] 
(3 rows) 

Теперь мне нужно, чтобы получить точное совпадение «тест Справочного центра», таким образом, он должен вернуть 3-й ряд. Мне в основном нужно сделать это точное совпадение, как если бы [20109,2010-01-01] не существует в справочный центр test [20109,2010-01-01], тем самым устраняя скобки и все в скобках. NOte результат в скобке может быть любым.

Если скобки не были там, я бы использовал что-то вроде SELECT name FROM clients WHERE lower(name) like '%call center test%', и это дало бы мне результат, но теперь мне нужно сделать то же самое с приведенными выше результатами? Это возможно?

ответ

1

По: http://www.postgresql.org/docs/8.1/static/functions-matching.html:

SELECT name FROM clients WHERE name ~* 'help center test \\[.*?\\]' 

Просто чтобы прояснить, что ~ * является регистронезависим матчем, так что нет никакой необходимости для вызова нижнего() функции по имени. Это будет соответствовать всем строкам, которые запускают «тест центра справки [», затем имеют n символов и, наконец, заканчиваются на «]» (оба без двойных кавычек, конечно).

+0

~ чувствительный к регистру, он не дал мне правильных результатов без снижения, но когда я добавил его в нем, он работал отлично, спасибо за этот ответ, очень ценный. Возможно, чувствительный к делу случай имеет отношение к моей старой версии postgres 8.1.22. Thx снова – Roland

+1

Извините - мой плохой. Исправлено соответственно - вы действительно должны использовать ~ * для нечувствительности к регистру. – ndtreviv

+0

Запомните это, спасибо снова – Roland

Смежные вопросы