仅选择包含数字的行

时间:2015-07-03 13:43:26

标签: tsql wildcard

我的数据包含以下字符串:

Hello | World | 40
Hi | World | 24244
One | Two | 27
This | That | 84f
Yes | No | 456gf
The | Test|54

现在我需要编写查询以仅获取那些行,其中只有最后的数字,过滤那些带有字符的行。上述结果如下:

Hello | World | 40
Hi | World | 24244
One | Two | 27
The | Test|54

我尝试了几种使用通配符的方法,但没有成功。

TB LIKE '%_|_[0-9]%' OR TB LIKE '%_|[0-9]%' 
AND TB NOT LIKE '%[0-9][^a-z]%'

等等。显然,例如此查询还返回包含456gf和84f的行。

4 个答案:

答案 0 :(得分:0)

我想你差不多了。 我不确定你的模式中是否有_或空格。 我认为主要的问题是“NOT ^”技巧没有按预期工作。你真的只想把它应用到最后一节。

试试这个你的WHERE ......

LTRIM(REVERSE(SUBSTRING(REVERSE(TB),1,CHARINDEX('|',REVERSE(TB)) - 1))) NOT LIKE '%[^0-9]%'

答案 1 :(得分:0)

尝试使用cte,

    declare @t table (field1 varchar(20),field2 varchar(20),field3 varchar(20) )
insert into @t
        ( field1, field2, field3 )
values  ('Hello','World','40')
        ,('Hi', 'World','24244')
        ,('One','Two','27')
        ,('This', 'That','84f')
        ,('Yes','No','456gf')
        ,('The','Test','54')
;with cte as(
select *, CASE ISNUMERIC(field3) WHEN 1 THEN CAST(field3 AS int) ELSE null end as Field4
from @t)
SELECT cte.field1,cte.field2,cte.field3 FROM cte
where field4 is not null

答案 2 :(得分:0)

使用isnumeric的try_parse,因为它比ISNUMERIC更快。

declare @t table (field1 varchar(20),field2 varchar(20),TB varchar(20) )
insert into @t
        ( field1, field2, TB )
values  ('Hello','World','40')
        ,('Hi', 'World','24244')
        ,('One','Two','27')
        ,('This', 'That','84f')
        ,('Yes','No','456gf')
        ,('The','Test','54')
;
Select * from @t 
WHERE  TRY_PARSE(Tb as int) IS NOT NULL

答案 3 :(得分:0)

这应符合您的要求(该表名为t,列c):

VARCHAR2

内部charindex select * from t where isnumeric(substring(c, charindex('|', c, charindex('|', c, 0) + 1) + 1, len(c))) = 1 找到第一个管道符号的位置,外部符号找到第二个管道符号的位置,因为它在第一个管道符号后面开始搜索。之后,isnumeric检查余数是否确实是一个数字。测试:

charindex('|', c, 0)