допустимая запись в запросе SQL - PullRequest
0 голосов
/ 01 марта 2010

У меня есть таблица с несколькими столбцами, и одним из столбцов является DockNumber. Я должен отобразить номера док-станции, если они подтверждают определенный формат

Первые пять символов - это цифры, за которыми следует знак «-», за которым следуют 5 символов. Последний, но один символ должен быть альфа.

12345-678V9

Как я могу проверить в SQL, если первые 5 символов являются числами, и есть дефис, а следующие 3 являются числами и последними, но один является альфа.

Ответы [ 8 ]

1 голос
/ 01 марта 2010

Опираясь на ответ @ gbn, он проверяет, чтобы убедиться, что длина равна 11 (в случае, если @val не является char (11) или varchar (11), а также проверяет, чтобы второй-последний символ был альфа *) 1001 *

DECLARE @val VARCHAR(20)
SET @val = '12345-678V9'
SELECT  CASE WHEN LEN(@val) = 11 AND @val LIKE '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][A-Z0-9][0-9]' 
        THEN 'isMatch'
        ELSE 'isNotMatch'
    END AS [Valid]
0 голосов
/ 01 марта 2010

Регулярное выражение должно быть '^\d{5}-\d{3}[A-Z]\d$', потому что без ^ и $ будут найдены более длинные строки, содержащие эту последовательность (122 12345-678V9 34).

0 голосов
/ 01 марта 2010

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

SELECT Case when 
Cast(ISNUMERIC(LEFT(@Str,5)) as int) + case when substring(@str,6,1)= '-' then 1 else 0 end +case when substring(@str,10,1) like '[a-z]' then 1 else 0 end =3
THEN 'Matched'
Else 'NotMatched'
End
0 голосов
/ 01 марта 2010
Where  DockNumber Like '[0-9][0-9][0-9][0-9][0-9][-][0-9][0-9][0-9][a-z][0-9]

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

0 голосов
/ 01 марта 2010

Использовать правило

CREATE RULE pattern_rule 
AS
@value LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][A-Z][0-9]'

Затем привяжите правило к столбцу

0 голосов
/ 01 марта 2010

PATINDEX, вероятно, является идеальным решением.

Select ...
From Table
Where PatIndex('[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][A-Z][0-9]', DockNumber) > 0
0 голосов
/ 01 марта 2010
LIKE '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][A-Z][0-9]'

Теперь, это также позволяет использовать строчные буквы a-z. Вам нужно было бы привести параметры сортировки, если вы хотите только верхний регистр

Value COLLATE Latin_General_BIN
       LIKE '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][A-Z][0-9]' COLLATE Latin_General_BIN
0 голосов
/ 01 марта 2010

Регулярные выражения может быть вашим другом.

...