【发布时间】:2012-09-21 11:13:52
【问题描述】:
表1
身份证
01
wire
02
steve
ram123
03
....
从表 1 我只想选择数值, 它不应该显示像 (ram123) 这样的字母数字值
预期输出
01
02
03
....
如何查询这个条件
【问题讨论】:
标签: sql sql-server tsql sql-server-2000
表1
身份证
01
wire
02
steve
ram123
03
....
从表 1 我只想选择数值, 它不应该显示像 (ram123) 这样的字母数字值
预期输出
01
02
03
....
如何查询这个条件
【问题讨论】:
标签: sql sql-server tsql sql-server-2000
【讨论】:
SELECT * FROM @Table
WHERE Col NOT LIKE '%[^0-9]%'
【讨论】:
只想注意 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
【讨论】:
SELECT column1 FROM table where ISNUMERIC(column1) = 1
【讨论】:
您可以同时使用翻译和替换功能。先把数字翻译成0,然后用null替换,只返回null值就可以解决问题了。
select column from table where replace(translate(column,'0123456789','0000000000'),'0','') is null
【讨论】:
我尝试了上面的代码 (ISNUMERIC()),但不知何故它在 Oracle SQL 中不起作用。
但我找到了适用于 Oracle SQL 的有效解决方案:
SELECT column1
FROM Table
WHERE regexp_like( column1, '^[[:digit:]]*$');
【讨论】: