T-SQL中的正则表达式

时间:2015-11-26 15:25:30

标签: sql sql-server regex

我有下一个问题,有列数据的表(类型 - nvarchar),这个列可以包含任何字符,我只需要选择数字或数字范围的数据,但忽略空格。例如:

declare @tmp table (data nvarchar(192), Result nvarchar(192));

insert into @tmp SELECT '123', '<- valid';
insert into @tmp SELECT ' 123 ', '<- valid';
insert into @tmp SELECT '123-123', '<- valid';
insert into @tmp SELECT ' 123 - 123 ', '<- valid';
insert into @tmp SELECT '123jmj', '<- invalid';
insert into @tmp SELECT '123,5441', '<- invalid';
insert into @tmp SELECT '123,yjyj', '<- invalid';

SELECT * FROM @tmp

结果数据集必须仅包含有效行。我可以尝试下一个

SELECT * FROM @tmp WHERE data NOT LIKE '%[^0-9]%'

但我只有第一排。

1 个答案:

答案 0 :(得分:2)

首先将white spaces替换为empty string

接下来将-替换为.

第三次使用ParseName技巧来分离数据。

分离后,您可以使用NOT LIKE '%[^0-9]%'

过滤记录
SELECT data
FROM   (SELECT *,
               Parsename(Replace(Replace(data, ' ', ''), '-', '.'), 2) st,
               Parsename(Replace(Replace(data, ' ', ''), '-', '.'), 1) ed
        FROM   @tmp) a
WHERE  st NOT LIKE '%[^0-9]%'
        OR ed NOT LIKE '%[^0-9]%'