Инструкция SQL с использованием LIKE - PullRequest
1 голос
/ 07 сентября 2010

Я хочу знать в столбце с именем NUMTSO, существуют ли данные с таким форматом "WO #############", так что я делаю так:

select *
from fx1rah00
where numtso like 'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

но я ничего не получаю.Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 07 сентября 2010

MySQL позволяет использовать регулярные выражения с ключевым словом REGEXP вместо LIKE. Я предлагаю следующий код:

SELECT *
  FROM `fx1rah00`
 WHERE `numtso` REGEXP 'WO[0-9]{13}'
1 голос
/ 07 сентября 2010

Это прекрасно работает для меня в SQL Server.Если вы не используете SQL Server, вам, вероятно, потребуется другой синтаксис, поскольку синтаксис шаблона не является стандартным SQL.

;with fx1rah00 As
(
select 'WO1234567890123' as numtso
)
select *
from fx1rah00
where numtso like 
             'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
0 голосов
/ 07 сентября 2010

Стандарт SQL не поддерживает REGEXP в LIKE.У них гораздо более примитивный шаблон языка.Вам нужно будет добавить функцию, или постфильтр, или открыть расширение для СУБД.

0 голосов
/ 07 сентября 2010

Что это за дбмс?Некоторые базы данных не позволяют использовать регулярное выражение в предложении like только подстановочные знаки.Если это оракул, вы можете проверить REGEXP_LIKE или REGEXP для mysql.

Я бы сделал что-то вроде:

where NUMTSO like 'WO%'
and REGEXP_LIKE(NUMTSO, 'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')

, используя аналогичныепри проверке регулярных выражений вы все еще можете сканировать диапазон по индексу, если он был.

...