我試圖將我的數據庫字段從VARCHAR(4)
轉換爲FLOAT
。這些字段中的某些值可能不是數字,因爲這些字段之前沒有任何驗證。我的主要目標是轉換浮點格式的任何integer
或decimal
值並保存在新的數據庫字段中。對於這個過程,我使用舊錶中的INSERT SELECT STATEMENT
到新表中。到目前爲止,我有這行代碼爲我的轉換:如何將varchar(4)轉換爲在SQL Server 2008中浮動?
CASE WHEN LEN(LTRIM(RTRIM(hs_td2))) <> 0 AND ISNUMERIC(hs_td2) = 1 THEN CAST(LTRIM(RTRIM(hs_td2)) AS float) ELSE NULL END AS hs_td2
第一步我修剪則值檢查它是否是數字,然後轉換爲浮動否則設置爲NULL。有了上面的代碼,我在微軟工作室收到此錯誤信息:
Msg 8114, Level 16, State 5, Line 13
Error converting data type varchar to float.
線13日開始我SELECT
發言。然後我也嘗試了這種轉換:
CASE WHEN LEN(LTRIM(RTRIM(hs_td2))) <> 0 AND ISNUMERIC(hs_td2) = 1 THEN CONVERT(FLOAT, LTRIM(RTRIM(hs_td2))) ELSE NULL END AS hs_td2
和我得到了同樣的錯誤信息。在我的字段中的值可能是這樣的:
10或5至10或0.9或11.6或-11.89等等...
我想知道如果isNumeric()
是最好的功能,我應該使用和爲什麼我的代碼產生上面列出的錯誤信息?
如果有人可以幫忙,請讓我知道。謝謝!
可能不是那些值。 'select cast(' - 11.89'as float)'執行成功。 –
@DanBracuk我不知道是否NULL值可能會導致一些問題? –
嘗試'hs_td2 NOT LIKE '%[^ 0-9]%' 或 ' - ' + hs_td2 NOT LIKE '%[^ 0-9]%''(反轉的條件,如果你第一次使用了'SELECT'希望看到無效值)。這仍然不能保證轉換會成功('1.1.1'通過這樣的方式滑動),但至少它過濾字母數字。 –