我有下一个问题,有列数据的表(类型 - 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]%'
但我只有第一排。
答案 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]%'