JPK*_*JPK 5 sql varchar type-conversion
导入工具将每个列作为 varchar(max) 放入多个表中,我正在寻找将列转换为正确类型的最快方法。
这工作正常,
ALTER TABLE dbo.myTable ALTER COLUMN myColumn INT
Run Code Online (Sandbox Code Playgroud)
但这惨败了
ALTER TABLE dbo.myTable ALTER COLUMN myColumn FLOAT
Run Code Online (Sandbox Code Playgroud)
出现错误:消息 8114,级别 16,状态 5,第 26 行将数据类型 varchar 转换为 float 时出错。
如何执行从 VarChar(max) 类型到 Float 类型的通用列转换?
我在这些帖子中找到了一些提示,但我无法将其转换:
如果 ISNUMERIC 将 varchar 转换为 float
select case isnumeric([myColumn]) when 1 then cast([myColumn] as float) else null end
from dbo.myTable
Run Code Online (Sandbox Code Playgroud)
和
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]%')
Run Code Online (Sandbox Code Playgroud)
ISNUMERIC 似乎有一些问题?
我不想这样做,因为有很多列需要编辑,是否有像 ALTER TABLE 这样的单行转换适用于大多数或所有场景?
或者有人建议将数据保存到临时列中?如果有人可以将代码发布到 tempColumn 中,然后转换原始数据并删除 tempColumn,这将是另一个有效的解决方案。
系统的小数分隔符的配置方式是否与 varchar 字段中的内容相同?\n在您的情况下,我会建议您 cr\xc3\xa9ate 一个新列(FLOAT)而不是更改现有列。然后用更新填充该字段。
\n\n这是一种将文本显式转换为浮动的方法。在 SQL Server 中此查询:
\n\nselect cast(replace('12,5',',','.') as float)*2\nRun Code Online (Sandbox Code Playgroud)\n\n结果 25 作为响应。这意味着成功转换为FLOAT
\n\n因此,要为新的 col 填充铸造值,您可以执行以下操作:
\n\nUPDATE Table SET FloatField=CAST(REPLACE(TextField,',','.') AS FLOAT)\nRun Code Online (Sandbox Code Playgroud)\n\n替换 , 为 。(如果有的话)然后转换为 FLOAT。希望这有帮助。
\n| 归档时间: |
|
| 查看次数: |
43376 次 |
| 最近记录: |