2016-01-13 3 views
0

Мне нужно создать SQL-запрос. Этот запрос нужно выбрать из таблицы, в которой столбец содержит регулярное выражение.Выберите Where Like Like regular выражение

Например, у меня есть эти значения:

TABLE тест (имя)

  • XHRTCNW
  • DHRTRRR
  • XHRTCOP
  • CPHCTPC
  • CDDHRTF
  • PEOFOFD

Я хочу выбрать все данные, у которых есть «HRT» после 1 символа (значения 1, 2 и 3 - значения, которые выглядят как «-HRT ---»), но не те, у кого может быть «HRT» после 1 символ (значение 5).

Так что я не знаю, как это сделать, потому что простой

SELECT * 
FROM test 
WHERE name LIKE "%HRT%" 

возвратит значение 1, 2, 3 и 5.

Извините, если я не совсем понятно, с чем я хочу/необходимость.

+0

plsql предназначен только для Oracle. – jarlh

ответ

1

Вы можете использовать substring.

SELECT * FROM test WHERE substring(name from 2 for 3) = 'HRT' 
+0

Круто! Он работает с этой функцией. Есть ли связь, где я могу найти «Все функции», доступные в разделе «Где»? – Dabeliuteef

0

Являются ли имена всегда 7 букв? Есть:

SELECT substring (2, 4, field) from sometable 

Это будет просто выбрать 2-4th символы, а затем вы можете использовать как «%» HRT

+0

Nop печально, это не всегда 7 букв – Dabeliuteef

+0

Независимо, все три ответа вернут записи, которые вы ищете. –

2

Вы также можете изменить шаблон. Вместо использования %, что означает нуль или что-то еще, вы можете использовать _, что означает ровно один.

SELECT * FROM test WHERE name like '_HRT%'; 
+0

О, этот способ также работает благодаря! Есть ли другой символ, который может означать другое значение, чем «_»? – Dabeliuteef

+1

Функция LIKE довольно ограничена и использует только «_» и «%» в качестве подстановочных знаков. Существуют и другие функции, которые обеспечивают полное соответствие регулярному выражению и т. Д. Подробная информация доступна по адресу: http://www.postgresql.org/docs/current/static/functions-matching.html – Gary

+0

Спасибо за отзыв! – Dabeliuteef

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