Как определить этот поиск? - PullRequest
2 голосов
/ 15 августа 2011

У меня есть коды клиентов, хранящиеся в таблице. Коды клиентов хранятся как:

CSC 1234
CSC 003E
CSC AAF8
etc.

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

Я использую следующее предложение:

SELECT TOP 1 *
FROM Customer 
WHERE custcode LIKE 'CSC [1-9][1-9][1-9][1-9]' 
ORDER BY custcode;

Но это дает 0 результатов. Что не так?

Ответы [ 4 ]

6 голосов
/ 15 августа 2011

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

Это действительно ясно из документации - почему вы ее не читаете?!


Возможно, вы после REGEXP:

SELECT TOP 1 *
  FROM Customer 
 WHERE custcode REGEXP 'CSC [1-9][1-9][1-9][1-9]'
 ORDER BY custcode;

Кроме того, я думаю, что вы имеете в виду LIMIT 1 с MySQL (TOP 1 от Microsoft SQL Server), и мы можем сжать это регулярное выражение:

SELECT *
  FROM Customer 
 WHERE custcode REGEXP 'CSC [1-9]{4}'
 ORDER BY custcode
 LIMIT 1;

Обновление sllev дает очень хорошее замечание, что вы можете иметь в виду [0-9] вместо [1-9].Адаптируйте соответствующим образом.


(И это «запрос», а не «предложение».)

1 голос
/ 15 августа 2011
SELECT * 
FROM Customer  
WHERE custcode REGEXP 'CSC [[:digit:]]{4}'; 
ORDER BY custcode
LIMIT 1;  
0 голосов
/ 15 августа 2011

или без регулярного выражения:

ВЫБРАТЬ * ОТ ПОЛЬЗОВАТЕЛЯ ГДЕ custcode> = 'CSC 0000' И custcode <= 'CSC 9999' ORDER BY custcode LIMIT 1; </p>

Также будет использоватьиндекс custcode (если определен) для фильтрации.

0 голосов
/ 15 августа 2011

Никогда не уклонялся от кормления с ложечки ...

SELECT *
FROM Customer 
WHERE custcode REGEXP 'CSC [1-9]{4}' 
ORDER BY custcode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...