我在尋找一種優雅的方式爲VARCHAR類型的字段轉換,並在它的可變數據,爲數據類型可以用於從現場 數學運算採樣數據(不包括引號)SQL Server中的變量varchar字段轉換爲金錢/十進制/東西帶小數位
''
'abc'
'23'
'23.2'
的方法應該適用於所有,並第&第二值應該返回0,而不是拋出一個SQL Server錯誤..
我在尋找一種優雅的方式爲VARCHAR類型的字段轉換,並在它的可變數據,爲數據類型可以用於從現場 數學運算採樣數據(不包括引號)SQL Server中的變量varchar字段轉換爲金錢/十進制/東西帶小數位
''
'abc'
'23'
'23.2'
的方法應該適用於所有,並第&第二值應該返回0,而不是拋出一個SQL Server錯誤..
SELECT CASE IsNumeric(mycol) WHEN 1 THEN CAST(mycol AS FLOAT) ELSE 0 END
FROM mytable
試試這個:
SELECT CASE WHEN IsNumeric(YourColumn) = 0 THEN
0
ELSE
CAST(YourColumn AS decimal(18, 2))
END
您必須調整目標數據類型,我選擇了十進制(18,2)進行演示。
如果您想將其轉換,你應該使用的UPDATE
代替SELECT
UPDATE Table
SET Col1 = CAST(Col1 As Decimal(18,2))
我知道這是一個早已死亡的線程,但我最近從谷歌搜索偶然發現了它,並有一個思想。它不如CASE聲明的優雅,但它是一種選擇。
SELECT
COALESCE(CAST(NULLIF(ISNUMERIC(LEFT(MyColumn, PATINDEX('% %', MyColumn + ' ') - 1)), 1) AS MONEY), LEFT(MyColumn, PATINDEX('% %', MyColumn + ' ') - 1))
FROM
myTable
,或者你可以這樣做:
Select COALESCE(CAST(NULLIF(ISNUMERIC(MyColumn), 1) AS MONEY), MyColumn)
FROM
myTable
頂級版本會看到「2」剛剛2,底部的人會看到它作爲一個文本字段。
COALESCE
對此是一個很好的選擇:查找更多信息here.它按順序計算參數並返回第一個表達式的當前值,該表達式最初不計算爲NULL。
ISNUMERIC
返回0或1取決於如果被評估的值可以被認爲是SQL「數字」或「數字」類型中的一種。例如int,bigint,money ..
NULLIF
本質上找到您指定的值,如果它匹配,則將其替換爲NULL
值。
CAST
只要改變這個例子來MONEY
數據類型到另正如你可以看到,如果你打破了樓下使用該信息的一個非常優雅的解決方案,我認爲?
COALESCE(CAST(NULLIF(ISNUMERIC(COL1), 1) AS MONEY), COL1)
通常,當你存儲在一個場不同類型的數據,它表明你有一個數據庫設計問題。 – HLGEM 2012-07-19 18:53:22