gpt4 book ai didi

将 varchar 值转换为数字数据类型时 SQL 转换失败

转载 作者:行者123 更新时间:2023-12-04 02:28:19 27 4
gpt4 key购买 nike

我在执行以下 SQL 查询时遇到一些困难:

SELECT
SUM(ArTrnDetail.NetSalesValue) AS [Price],
'ExecuteSubReport(813, 0, Job)' AS [LaborCost],
'ExecuteSubReport(815, 0, Job)' AS [MaterialCost],
'ExecuteSymbolicMath(LaborCost + MaterialCost)' AS [TotalCost],
'ExecuteSymbolicMath(Price - (LaborCost + MaterialCost))' AS [Margin],
CASE
WHEN SUM(ArTrnDetail.NetSalesValue) = 0
THEN 0
ELSE 'ExecuteSymbolicMath(1 - (TotalCost / Price))' <-- Where it's failing
END AS [MarginPct]

ExecuteSubReportExecuteSymbolicMath 是公司功能。 ExecuteSymbolicMath 基本上去除不需要的字符,如 $ 和逗号,进行数学计算并将结果作为字符串返回。该列的最终结果是 0-1 之间的小数点(2 位)。当我尝试运行查询时,我收到一条错误消息,指出它无法将 varchar 转换为数字。我已经尝试了几乎所有我能想到的方法。我试过替换、转换、转换、str。

非常感谢您的帮助!

最佳答案

SQL 表达式只有一种类型。 case 表达式也不异常(exception)。

根据 SQL 的规则,数字胜过字符串,因此 SQL 会尝试将字符串转换为数字——这就是正在发生的事情。

只需在 case 表达式中使用 '0' 而不是 0:

(CASE WHEN SUM(ArTrnDetail.NetSalesValue) = 0 
THEN '0'
ELSE 'ExecuteSymbolicMath(1-(TotalCost/Price))' <-- Where it's failing
END) AS [MarginPct]

或者,如果你真的想要计算,去掉所有的单引号:

(CASE WHEN SUM(ArTrnDetail.NetSalesValue) = 0 
THEN 0
ELSE ExecuteSymbolicMath(1-(TotalCost/Price))
END) AS [MarginPct]

关于将 varchar 值转换为数字数据类型时 SQL 转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65833799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com