簡體   English   中英

SQL將varchar列轉換為float

[英]SQL convert varchar column to float

導入工具將幾列中的每一列都設置為varchar(max),我正在尋找將列轉換為正確類型的最快方法。

這工作正常,

ALTER TABLE dbo.myTable ALTER COLUMN myColumn INT

但這種情況很糟糕

ALTER TABLE dbo.myTable ALTER COLUMN myColumn FLOAT

出錯:消息8114,級別16,狀態5,行26錯誤將數據類型varchar轉換為float。

如何執行從VarChar(max)類型到Float的通用列轉換?


我在這些帖子中找到了一些提示,但我無法將其轉換為:

將varchar轉換為float IF ISNUMERIC

轉換數據類型varchar時出錯

將varchar轉換為float的錯誤

select case isnumeric([myColumn]) when 1 then cast([myColumn] as float) else null end
from dbo.myTable

SELECT TOP (100) CAST(CASE WHEN IsNumeric([myColumn]) = 1 THEN [myColumn] ELSE NULL END AS float) AS [myColumn]
FROM         dbo.myTable
WHERE     ([myColumn] NOT LIKE '%[^0-9]%')

似乎ISNUMERIC存在一些問題?

我不希望這樣做,因為有很多列要編輯,是否有像ALTER TABLE一樣的單行轉換,適用於大多數或所有場景?

或者有人建議將數據保存到臨時列中? 如果有人可以將代碼發布到tempColumn中然后轉換原始文件並刪除tempColumn,那將是另一個有效的解決方案。

系統的小數分隔符是否與varchar字段中的內容配置方式相同? 在您的情況下,我會建議您使用新列(FLOAT)而不是更改現有列。 然后用更新填充該字段。

這是一種將文本顯式轉換為float的方法。 在SQL Server中這個查詢:

select cast(replace('12,5',',','.') as float)*2

重申25作為回應。 這意味着成功轉換為FLOAT

因此,要為您填充新的col,您可以執行以下操作:

UPDATE Table SET FloatField=CAST(REPLACE(TextField,',','.') AS FLOAT)

那取代了,為。 (如果有的話),然后轉換為FLOAT。 希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM