sql - 将 varchar 转换为数字噩梦
问题描述
我想把这个扔给团队,因为我被这个难住了。任何建议,将不胜感激。
我正在加载一个表,其中包含另一个表中的数据,在此过程中,数据类型从 VARCHAR 更改为 NUMERIC。我收到一个错误:将数据类型 varchar 转换为数字时出错。
此错误通常表明该列中必须有一个根本无法转换为 NUM 的值——例如:'Y'。除了在这种情况下,除了数值之外什么都没有,即使数据库认为它们不是。
我通过一次投射一列来缩小问题列的范围。奇怪的是我可以将问题列转换为 FLOAT,然后转换为 NUMERIC。这可能是一个解决方案,但我担心将 FLOAT 与货币一起使用,我认为当您有几个小数位时,FLOAT 不会将相同的 NUMERIC 舍入。但是我可能弄错了,使用 FLOAT 完全没问题。
只是为了测试,我尝试了 INT,当我尝试 CAST AS INT 时,我得到了一个更具体的错误。将 varchar 值“1823.33”转换为数据类型 int 时转换失败。
因此,当我运行以下查询时,一切似乎都可以正常工作……</p>
SELECT
[Expended]
,CAST([Expended] AS FLOAT) AS Exp_FLOAT
,CAST(CAST([Expended] AS FLOAT) AS NUMERIC (18,4)) AS Exp_NUM
FROM [Stage].[BI_FACT_SPENDPLAN_C]
where [Expended] ='1823.33'
Expended Exp_FLOAT Exp_NUM
1823.33 1823.33 1823.3300
1823.33 1823.33 1823.3300
1823.33 1823.33 1823.3300
1823.33 1823.33 1823.3300
1823.33 1823.33 1823.3300
我想我要问的是:您认为我应该 CAST AS FLOAT 然后 CAST AS NUMERIC 还是 SPENDPLAN 导出文件中的以下 9 列有重要意义?然后它引出了一个问题,如果我用双 CAST “修复”这些列,它是否会发生在另一列上并在表加载时失败?
SELECT
[Expended]
,[Obligated]
,[Total_Expended]
,[Total_Obligated_FAMIS]
,[Spendplan_Balance]
,[Pending_Expenditures]
,[Unexpended_Balance]
,[Funds_Remaining_by_BBFY]
,[PY_Funds_Remaining]
FROM [Stage].[BI_FACT_SPENDPLAN_C]
解决方案
只是要确定...
这完美地工作:
declare @expended varchar(100)='1823.33'
select convert(numeric,@expended)
您完全确定您的问题确实与该记录有关吗?
推荐阅读
- sql-server - TSQL - 将数据从一个表复制到另一个表
- php - 基于当前日期的 ebay api 过滤器列表
- html - css中边框样式的结束
- c# - 无法使用脚本任务将更新的值分配给 ssis 变量
- javascript - 如何遍历一个对象并将金额汇总到每种付款类型?
- python - 为 COCO 数据集生成 TFRecord
- r - 在同一张图上使用 R 将两个变量绘制为线
- scala - 使用 Option 作为输入参数定义 Spark scala UDF
- simpleitk - 在sitk.ReadImage()中应该如何使用参数?
- javascript - JQuery获取请求回调函数未执行