如何從此列中檢索整數值?如何只從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
如何從此列中檢索整數值?如何只從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
您可以使用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
但請記住,你的設計看起來並不好。您應該只爲每列存儲一種數據類型。
感謝
這個答案是關於所有類型的數字,而不是INTEGERS –
Select name from tbl_data where Isnumeric(name) = 1 and name not like '%.%'
這個答案不涉及浮點數字,例如123e4 –
您可以並且不會將'%e%'命名爲where子句 – Hadi
@ H.Fadlallah爲什麼您使用%e%這裏我們只能使用%。%,它只會給我們整數值。 –
您可以使用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
以兩個最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
這是一個**糟糕的設計**開始於......任何列應該只包含**一種類型的數據** - 無論是列是一個'int'列或一個字符串 - 但不要在一個列中混合使用這兩個東西 –
現在停止並重新設計您的數據庫。 –
@ Nick.McDermaid。你知道Ajit嗎? –