2010-04-20 35 views
1

我在SQL数据库表中有一个简单的nvarchar(25)列。大多数情况下,此字段应包含字母数字文本。但是,由于操作员错误,有很多情况下它只包含一个数字。我可以在SQL中进行简单的搜索以确定这些情况吗?即,确定表中的哪些行仅包含此列中的数字。作为扩展,我是否也可以搜索那些只包含数字和空格和/或斜杠的列值。如何在varchar列中搜索数字

在其他语言(如Perl,Java)中,正则表达式可以快速轻松地解决此问题。但我一直无法在SQL中找到相应的东西。

+0

可能的重复http://stackoverflow.com/questions/1858867/how-to-get-only-numeric-column-values – 2010-04-20 06:26:07

+0

您接受的答案不起作用。尝试'SELECT ISNUMERIC('1E2'),ISNUMERIC('1D2')' – 2011-09-25 19:22:50

回答

2

是的,你可以通过使用SQL中使用IsNumeric函数实现这一目标断绝

检查更在此链接:http://msdn.microsoft.com/en-us/library/aa933213(SQL.80).aspx

+0

很酷。例如,如果我想搜索“30/23”? – dave 2010-04-20 06:37:51

+1

在SQL 2000中;那会很难。在2005年以后,我会说使用正则表达式。 – u07ch 2010-04-20 06:39:32

+0

这里的isnumeric函数并不好,因为isnumeric('787315689001e180')是真的,但是输入包含一个'e',它不是数字。 – 2012-04-19 13:20:08

0
select column_name from table_name where IsNumeric(column_name) <> 1 
+0

此处的isnumeric函数并不好,因为isnumeric('787315689001e180')为true,但输入包含一个不是数字的'e'。 – 2012-04-19 13:20:24

1

只有数字:

SELECT * FROM Table WHERE ISNUMERIC(Field) = 1 

随着空间:

SELECT * FROM Table WHERE Field LIKE '% %' 

以斜线:

SELECT * FROM Table WHERE Field LIKE '%/%' 

组合:

SELECT * FROM Table WHERE ISNUMERIC(Field) = 1 OR Field LIKE '% %' OR Field LIKE '%/%' 
+0

这里的isnumeric函数不好,因为isnumeric('787315689001e180')为真,但输入包含一个'e',它不是数字。 – 2012-04-19 13:20:18

1

所有提到IsNumeric函数的答案,但他们是不正确的,我在评论提到过所有的答案这个安全漏洞存在答案。正确的解决方案是在where子句中使用正则表达式,其中包含不像'%[^ 0-9]%',请参阅下面的示例:

select column_name from table_name where column_name not like '%[^0-9]%'