2010-09-06 2 views
1

Я хочу знать в столбце NUMTSO, если существуют данные с этим форматом «WO #############», так что я делаю вот так:Заявление SQL, использующее LIKE

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]' 

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

+5

Какие СУБД вы используете? –

+3

Некоторые примеры данных помогут, а также тип данных для рассматриваемого столбца. – 2010-09-06 22:25:07

ответ

0

Что такое dbms? Некоторые базы данных не позволяют использовать регулярное выражение в подобных предложениях только подстановочные знаки. Если его оракул вы можете проверить 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]') 

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

+0

SQL Server поддерживает диапазоны символов. – 2010-09-06 22:23:42

+0

спасибо Джефф, приятно знать, я отредактировал, чтобы сказать «некоторые базы данных не делают», –

1

Это отлично работает для меня на 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

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

1

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

SELECT * 
    FROM `fx1rah00` 
WHERE `numtso` REGEXP 'WO[0-9]{13}' 
Смежные вопросы