我正在處理各種與其數據類型混淆的遺留數據庫。有列應該是integers
,但保存爲varchar(9)
。我正在創建表格的新版本並嘗試正確導入整數值。我有需要被轉換爲int的字段如下聲明:SQL Server isnumeric將varchar視爲十六進制值,但不會更改爲int
CASE
ISNUMERIC(fieldname)
WHEN 0 THEN NULL
ELSE CAST(fieldname AS int) AS fieldname
,保持跳閘這件事是值:029999E00
。
錯誤是:轉換VARCHAR值 '029999E00' 爲int類型時
轉換失敗。
大多數時候,這個工程很好,會給我一個有效的int值或NULL。
爲什麼ISNUMERIC
說這個值是int,但是CAST
無法轉換它?我也試過bigint
,我得到了同樣的結果。是否有另一種方法來檢查這樣的值?
還有一篇關於使用ISNUMERIC作爲解決方案的文章,但ISNUMERIC在這種情況下不起作用。我需要另一個選項來檢查一個數值,或者確保CAST語句在獲取值時不會失敗,如果它是十六進制值。
快速版本是:'ISNUMERIC'不是確定值是否可以轉換爲'INT'的可靠方法。你使用的是什麼版本的SQL Server? – Siyual
這是一篇很好的文章,解釋ISNUMERIC的一些缺陷。 http://www.sqlservercentral.com/articles/ISNUMERIC%28%29/71512/ –
這些值應該是十六進制?因爲'ISNUMERIC'將您的示例解釋爲科學記號編號'299999 * 10^0' – Stavr00