如何仅选择数值

问题描述 投票:14回答:6

表1

id

01
wire
02
steve
ram123
03
....

从table1我只想选择数字值,它不应显示字母数字值,例如(ram123)

预期输出

01
02
03
....

如何对此条件进行查询

sql sql-server tsql sql-server-2000
6个回答
22
投票

尝试ISNUMERIC

ISNUMERIC

SELECT * FROM Table1 WHERE ISNUMERIC([ID]) = 1


6
投票

1
投票

只是要注意IsNumeric()有一些限制。例如,以下所有内容将返回1。

SELECT * FROM @Table 
WHERE Col NOT LIKE '%[^0-9]%' 

因此,如果您仅希望选择数字,则可以执行以下操作:

SELECT ISNUMERIC(' - ')
SELECT ISNUMERIC(' , ')
SELECT ISNUMERIC('$')
SELECT ISNUMERIC('10.5e-1')
SELECT ISNUMERIC('$12.09')

0
投票
create function [dbo].[IsNumbersOnly](@strSrc as varchar(255))
returns tinyint
as
begin

    return isnumeric(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
        @strSrc, '\', 'x'), '-', 'x'), ',', 'x'), '+', 'x'), '$', 'x'), '.', 'x'), 'e', 'x'), 'E', 'x'),
        char(9), 'x'), char(0), 'x'))
end

0
投票

您可以同时使用翻译和替换功能。首先将数字转换为0,然后将其替换为null,然后仅返回null值即可解决问题。

 SELECT column1 FROM table where ISNUMERIC(column1) = 1

0
投票

我尝试了上面的代码(ISNUMERIC()),但它在某种程度上在Oracle SQL中不起作用。我找到了一个适用于Oracle SQL的解决方案。

select column from table where  replace(translate(column,'0123456789','0000000000'),'0','') is null 

来自SELECT column1 FROM Table WHERE regexp_like( column1, '^[[:digit:]]*$');

© www.soinside.com 2019 - 2024. All rights reserved.