SQL 服务器中的模式匹配使用正则表达式
Pattern match in SQL Server using regular expressions
我正在尝试在 SQL 服务器 (2019) 列中识别此类模式:
78878001
1-1321-32
1321-12
121-5489-19
403-3-XXXXX
规则是:
- 只有数字
或者
- 只有数字和连字符(至少一个连字符一个但没有具体数量)
要么
数字、连字符和字母 X
我试过这个:
SELECT * FROM [TABLE1] WHERE [Part no] like '[0-9]%-%'
但它 returns 一些不正确的值,例如:
- 702-3-01960 09150006125
700-3-02474 方舟 4787-PA-51H-99999
如果您至少使用 SQL Server 2012,我想您可以使用 try_parse 来解决这个问题。以您的数据为例:
create table #testing1 (val varchar(100))
INSERT INTO #testing1
VALUES
('78878001'),
('1-1321-32'),
('1321-12'),
('702-3-01960 09150006125'),
('700-3-02474 Arkds 4787-PA-51H-99999'),
('121-5489-19'),
('403-3-XXXXX')
select *
from #testing1
where try_parse(replace(replace(val, '-', ''), 'X', '') AS int) is not null
我正在尝试在 SQL 服务器 (2019) 列中识别此类模式:
78878001
1-1321-32
1321-12
121-5489-19
403-3-XXXXX
规则是:
- 只有数字 或者
- 只有数字和连字符(至少一个连字符一个但没有具体数量) 要么 数字、连字符和字母 X
我试过这个:
SELECT * FROM [TABLE1] WHERE [Part no] like '[0-9]%-%'
但它 returns 一些不正确的值,例如:
- 702-3-01960 09150006125
700-3-02474 方舟 4787-PA-51H-99999
如果您至少使用 SQL Server 2012,我想您可以使用 try_parse 来解决这个问题。以您的数据为例:
create table #testing1 (val varchar(100))
INSERT INTO #testing1
VALUES
('78878001'),
('1-1321-32'),
('1321-12'),
('702-3-01960 09150006125'),
('700-3-02474 Arkds 4787-PA-51H-99999'),
('121-5489-19'),
('403-3-XXXXX')
select *
from #testing1
where try_parse(replace(replace(val, '-', ''), 'X', '') AS int) is not null