2010-04-20 33 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]%'