2016-10-23 57 views
4

如何從此列中檢索整數值?如何只從SQL Server中檢索整數值

我的表:

CREATE TABLE tbl_data (
    [Name] nvarchar(max) 
) 

INSERT INTO tbl_data VALUES 
('Nikesh'), 
('113'), 
('sunam'), 
('sudhir'), 
('2.30'), 
('ankit'), 
('675') 

輸出我需要:

Name 
----- 
113 
675 
+4

這是一個**糟糕的設計**開始於......任何列應該只包含**一種類型的數據** - 無論是列是一個'int'列或一個字符串 - 但不要在一個列中混合使用這兩個東西 –

+2

現在停止並重新設計您的數據庫。 –

+0

@ Nick.McDermaid。你知道Ajit嗎? –

回答

3

您可以使用IsNumeric函數。

欲瞭解更多信息,請訪問:https://msdn.microsoft.com/en-us/library/ms186272.aspx

:資源下載有一個例子:

USE master; 
GO 
SELECT name, isnumeric(name) AS IsNameANumber, database_id, isnumeric(database_id) AS IsIdANumber 
FROM sys.databases; 
GO 

但請記住,你的設計看起來並不好。您應該只爲每列存儲一種數據類型。

感謝

+3

這個答案是關於所有類型的數字,而不是INTEGERS –

3
Select name from tbl_data where Isnumeric(name) = 1 and name not like '%.%' 
+1

這個答案不涉及浮點數字,例如123e4 –

+0

您可以並且不會將'%e%'命名爲where子句 – Hadi

+1

@ H.Fadlallah爲什麼您使用%e%這裏我們只能使用%。%,它只會給我們整數值。 –

3

您可以使用XML.value

;WITH tbl_data AS (
SELECT * 
FROM (VALUES 
('Nikesh'), 
('113'), 
('sunam'), 
('sudhir'), 
('2.30'), 
('ankit'), 
('675') 
) as t([Name]) 
) 

SELECT * 
FROM tbl_data 
WHERE CAST([Name] as xml).value('. cast as xs:integer?','int') IS NOT NULL 

輸出:

Name 
113 
675 
6

以兩個最upvoted answer on the duplicate target,並從代碼刪除.,加上評論答案爲Why are non-digits LIKE [0-9]?,準確答案呃關於整數這個問題是這樣的:

SELECT Name 
FROM tbl_data 
WHERE Name NOT LIKE '%[^]%' COLLATE Latin1_General_CS_AS 
+0

它不符合科學記數法 – Hadi

+1

@ H.Fadlallah,你是對的,但通常整數不意味着用科學記數法寫成。 –

+0

你說得對@Vladimir – Hadi