我有一個包含字符和數字將varchar轉換爲float IF ISNUMERIC
12
13
14
19K/YR
22
所以列類型爲VARCHAR列。但是,我也在用這個列進行一些計算,所以我試圖將數據轉換爲浮點數,如果它是數字的話。
這雖然給我一個錯誤:
SELECT CASE ISNUMERIC(QTY)
WHEN 1 THEN CAST(QTY AS float)
ELSE QTY
END AS test
我有一個包含字符和數字將varchar轉換爲float IF ISNUMERIC
12
13
14
19K/YR
22
所以列類型爲VARCHAR列。但是,我也在用這個列進行一些計算,所以我試圖將數據轉換爲浮點數,如果它是數字的話。
這雖然給我一個錯誤:
SELECT CASE ISNUMERIC(QTY)
WHEN 1 THEN CAST(QTY AS float)
ELSE QTY
END AS test
你不能施放浮動,保持字符串中的同一列。你可以這樣做,以獲得空當ISNUMERIC返回0
SELECT CASE ISNUMERIC(QTY) WHEN 1 THEN CAST(QTY AS float) ELSE null END
+1:打我吧 - 一列不能超過一種數據類型 – 2011-05-23 03:48:56
當然,除了再次ISNUMERIC掉落的事實:'SELECT CASE ISNUMERIC('£2')當1個CAST( '2英鎊'浮動)ELSE空END'。有沒有人發現過ISNUMERIC可以在沒有任何欺騙的情況下使用的情況? – 2011-05-23 04:45:45
..extending Mikaels的答案
SELECT
CASE WHEN ISNUMERIC(QTY + 'e0') = 1 THEN CAST(QTY AS float) ELSE null END AS MyFloat
CASE WHEN ISNUMERIC(QTY + 'e0') = 0 THEN QTY ELSE null END AS MyVarchar
FROM
...
e0
修復了一些ISNUMERIC issues (如+
-
.
和空字符串被接受)與涉及'int'的常見問題不同,這個涉及轉換爲'float' - 那麼如果QTY值已經是''1.5e10'(它可以轉換爲浮點數)呢? – 2011-05-23 04:48:43
@Damien_The_Unbeliever:在這種情況下失敗。我個人主要使用小數,所以從來沒有需要完全解決 – gbn 2011-05-23 04:55:23
- 嘗試這個 -
select name= case when isnumeric(empname)= 1 then 'numeric' else 'notmumeric' end from [Employees]
但轉換退出不可能
select empname=
case
when isnumeric(empname)= 1 then empname
else 'notmumeric'
end
from [Employees]
我發現這非常惱人的錯誤,同時將伴隨ISNUMERIC僱員值:
SELECT DISTINCT [EmployeeID],
ISNUMERIC(ISNULL([EmployeeID], '')) AS [IsNumericResult],
CASE WHEN COALESCE(NULLIF(tmpImport.[EmployeeID], ''), 'Z')
LIKE '%[^0-9]%' THEN 'NonNumeric' ELSE 'Numeric'
END AS [IsDigitsResult]
FROM [MyTable]
返回:
EmployeeID IsNumericResult MyCustomResult ---------- --------------- -------------- 0 NonNumeric 00000000c 0 NonNumeric 00D026858 1 NonNumeric (3 row(s) affected)
希望這有助於!
你能告訴我們錯誤是什麼嗎? – Jim 2011-05-23 03:44:40