如何从varchar列获取仅包含数值的结果集?

时间:2015-03-15 07:20:14

标签: sql sql-server

我有以下格式的数据。数据量超过100k。 我有id列,它是varchar(8)。它可以包含数字0到9和字符a到z(小字符)。

ID          Name
-------------------   
123         Abhinav
a12b        Rajesh
2bj5K       Manish
344         Utkarsh

我只需要获取那些只有数字的ID。

我想要结果集AS

ID         Name
----------------
123        Abhinav
344        Utkarsh

我有查询。我想知道这个查询是否能为我提供最佳解决方案:

SELECT
    ID, Name
FROM  
    Emp
WHERE
    ID = UPPER(ID)

3 个答案:

答案 0 :(得分:3)

您应该使用ISNUMERICmsdn):

SELECT ID, Name FROM Emp WHERE ISNUMERIC(ID)=1

答案 1 :(得分:2)

使用正则表达式:

Select ID,Name
FROM Emp
Where ID not like '%[A-Z]%'

答案 2 :(得分:1)

仅使用数字获取ID的正确方法是使用like比较:

select ID, Name
from Emp
where ID not like '%[^0-9]%'

此代码将正确过滤出ID为34-61.33的记录,isnumeric()函数将其视为数字。因此,如果您的数据如下所示:

ID          Name
123         Abhinav
A12B        Rajesh
2BjK        Manish
344         Utkarsh
34-6        Utkarsh
1.33        Utkarsh

您获得以下输出:

select ID, Name
from Emp
where ID not like '%[^0-9]%'

--------------
ID         Name
123        Abhinav
344        Utkarsh

对于isnumeric(),它将是

select ID, Name
from Emp
where isnumeric(ID)=1

--------------
ID         Name
123        Abhinav
344        Utkarsh
34-5       Utkarsh
1.33       Utkarsh

<强> sql fiddle demo