我在SQL数据库表中有一个简单的nvarchar(25)列。大多数情况下,此字段应包含字母数字文本。但是,由于操作员错误,有很多情况下它只包含一个数字。我可以在SQL中进行简单的搜索以确定这些情况吗?即,确定表中的哪些行仅包含此列中的数字。作为扩展,我是否也可以搜索那些只包含数字和空格和/或斜杠的列值。如何在varchar列中搜索数字
在其他语言(如Perl,Java)中,正则表达式可以快速轻松地解决此问题。但我一直无法在SQL中找到相应的东西。
我在SQL数据库表中有一个简单的nvarchar(25)列。大多数情况下,此字段应包含字母数字文本。但是,由于操作员错误,有很多情况下它只包含一个数字。我可以在SQL中进行简单的搜索以确定这些情况吗?即,确定表中的哪些行仅包含此列中的数字。作为扩展,我是否也可以搜索那些只包含数字和空格和/或斜杠的列值。如何在varchar列中搜索数字
在其他语言(如Perl,Java)中,正则表达式可以快速轻松地解决此问题。但我一直无法在SQL中找到相应的东西。
是的,你可以通过使用SQL中使用IsNumeric函数实现这一目标断绝
检查更在此链接:http://msdn.microsoft.com/en-us/library/aa933213(SQL.80).aspx
select column_name from table_name where IsNumeric(column_name) <> 1
此处的isnumeric函数并不好,因为isnumeric('787315689001e180')为true,但输入包含一个不是数字的'e'。 – 2012-04-19 13:20:24
只有数字:
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 '%/%'
这里的isnumeric函数不好,因为isnumeric('787315689001e180')为真,但输入包含一个'e',它不是数字。 – 2012-04-19 13:20:18
所有提到IsNumeric函数的答案,但他们是不正确的,我在评论提到过所有的答案这个安全漏洞存在答案。正确的解决方案是在where子句中使用正则表达式,其中包含不像'%[^ 0-9]%',请参阅下面的示例:
select column_name from table_name where column_name not like '%[^0-9]%'
可能的重复http://stackoverflow.com/questions/1858867/how-to-get-only-numeric-column-values – 2010-04-20 06:26:07
您接受的答案不起作用。尝试'SELECT ISNUMERIC('1E2'),ISNUMERIC('1D2')' – 2011-09-25 19:22:50