Регулярное выражение T-SQL для почтовых кодов

#sql #sql-server #tsql #wildcard

Вопрос:

Я пытаюсь использовать регулярное выражение T-SQL для почтовых индексов. Я пытаюсь создать состояние, при котором

  • Первой буквой может быть буква W или буква B.
    • Если первая буква-W, то вторая должна быть S
    • Если первая буква a B, то вторая должна быть номером

Что у меня есть до сих пор, так это вот что…

 [WB][S1-9]
 

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

Комментарии:

1. postcode like 'WS%' or postcode like 'B[0-9]%' ?

2. Обратите внимание, что SQL Server не поддерживает регулярные выражения; только базовое сопоставление шаблонов.

3. В настоящее время у меня нет доступа к Sql Server, но я думаю, что вы можете использовать postcode like '[W][S]%' OR postcode like '[B][0-9]%' .

Ответ №1:

Пожалуйста, проверьте, решает ли это ваши потребности

 -- DDL DML: sample table with some rows
DROP TABLE IF EXISTS T
GO
CREATE TABLE T(txt varchar(10))
GO
INSERT T(txt) VALUES
    ('WSfgsd'),
    ('Werwgerh'),
    ('B12uyktgfd'),
    ('Bcyec'),
    ('tybi')
GO

------ Solution option 1
SELECT txt
FROM T
WHERE 
    txt like 'WS%' -- If the first letter is a W then the second must be S = meaning start with WS
    OR
    (txt like 'B%' and SUBSTRING(txt,2,1) like '[0-9]') -- If the first letter is a B then the second must me a number
GO