我有以下格式的数据。数据量超过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)
答案 0 :(得分:3)
您应该使用ISNUMERIC
(msdn):
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-6
或1.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 强>