#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