SQL varchar 字段中 7 位数字的正则表达式
SQL Regex for 7 digit number in varchar field
问题:
'extract' TEXT 列包含以 7 开头的 7 位数字的所有行并且只显示 7 位数字的最佳方法是什么?
SQL 服务器 2017:
CREATE TABLE [TABLE_1] (
TEXT varchar(50) Null,
);
INSERT INTO TABLE_1
(TEXT)
VALUES
('7005011'),
('The Number is 7335022'),
('asd*.-: wqe'),
('/7225033/.123'),
('Nr.: 7115044')
;
期望的结果是:
+---------+
| TEXT |
+---------+
| 7005011 |
| 7335022 |
| 7225033 |
| 7115044 |
+---------+
SQL服务器本身没有正则表达式,你需要使用PATINDEX
、SUBSTRING
和LIKE
:
SELECT [TEXT] = SUBSTRING([TEXT],
PATINDEX('%7' + REPLICATE('[0-9]', 6) + '%', [TEXT]), 7)
FROM dbo.TABLE_1
WHERE [TEXT] LIKE '%7' + REPLICATE('[0-9]', 6) + '%';
输出:
TEXT
7005011
7335022
7225033
7115044
问题: 'extract' TEXT 列包含以 7 开头的 7 位数字的所有行并且只显示 7 位数字的最佳方法是什么?
SQL 服务器 2017:
CREATE TABLE [TABLE_1] (
TEXT varchar(50) Null,
);
INSERT INTO TABLE_1
(TEXT)
VALUES
('7005011'),
('The Number is 7335022'),
('asd*.-: wqe'),
('/7225033/.123'),
('Nr.: 7115044')
;
期望的结果是:
+---------+
| TEXT |
+---------+
| 7005011 |
| 7335022 |
| 7225033 |
| 7115044 |
+---------+
SQL服务器本身没有正则表达式,你需要使用PATINDEX
、SUBSTRING
和LIKE
:
SELECT [TEXT] = SUBSTRING([TEXT],
PATINDEX('%7' + REPLICATE('[0-9]', 6) + '%', [TEXT]), 7)
FROM dbo.TABLE_1
WHERE [TEXT] LIKE '%7' + REPLICATE('[0-9]', 6) + '%';
输出:
TEXT |
---|
7005011 |
7335022 |
7225033 |
7115044 |