15

表格1

ID

01
wire
02
steve
ram123
03
....

从 table1 我只想选择数值,它不应该显示像 (ram123) 这样的字母数字值

预期产出

01
02
03
....

如何查询此条件

4

6 回答 6

27

尝试ISNUMERIC

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

SQLFiddle 演示

于 2012-09-30T06:19:43.497 回答
6
SELECT * FROM @Table 
WHERE Col NOT LIKE '%[^0-9]%' 
于 2012-09-30T21:04:16.287 回答
1

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

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

因此,如果您只想选择数字,那么这样的事情可能会起作用:

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
于 2012-09-30T07:01:12.037 回答
0
 SELECT column1 FROM table where ISNUMERIC(column1) = 1
于 2012-09-30T06:23:19.843 回答
0

您可以一起使用翻译和替换功能。首先将数字转换为 0,然后将它们替换为 null 并仅返回 null 值可以解决问题。

select column from table where  replace(translate(column,'0123456789','0000000000'),'0','') is null 
于 2017-08-16T13:47:51.683 回答
0

我尝试了上面的代码 ( ISNUMERIC()),但它在 Oracle SQL 中不起作用。
但我找到了适用于 Oracle SQL 的有效解决方案:

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

来自:https ://community.oracle.com/thread/2394572

于 2020-06-02T06:00:00.340 回答