[英]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的通用列轉換?
我在這些帖子中找到了一些提示,但我無法將其轉換為:
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.