gpt4 book ai didi

sql-server - 将数据类型 nvarchar 转换为数字异常时出错

转载 作者:行者123 更新时间:2023-12-01 00:02:10 27 4
gpt4 key购买 nike

我试图在 SQL Server Management Studio 中执行如下所示的查询,但出现此错误

Converting data type nvarchar to numeric exception

查询:

SELECT TOP 100 
CASE WHEN ISNUMERIC(SUM(CAST([dbo].[Orders].[CustomerID] AS DECIMAL (38, 4)))) = 1
THEN CAST(SUM(CAST ([dbo].[Orders].[CustomerID] AS DECIMAL (38, 4))) AS INT)
ELSE NULL
END AS [Column1]
FROM
[dbo].[Orders]

谁能帮我清除这个错误?

最佳答案

停下来思考。通常,对 ID 列求和是没有意义的。除非您的架构中隐含某些内容,否则这样的总和没有任何意义。您可以为客户 1 有 1000 个订单,或为客户 500 有 2 个订单。这两种情况总和为相同的值 - 这有用吗?

此外,您的错误意味着您的 ID 列不是数字。在这种情况下,您对 isnumeric 的使用应该是 INSIDE 求和表达式。总和聚合将始终返回一个数值;没有必要将它放在 isnumeric/coalesce 函数中。

最后,您的架构令人担忧。有人选择将 ID 列定义为 nvarchar - 为什么?也许有一个很好的理由,但目前看来不太可能。该选择表明表设计者打算允许 ID 列中的任何字符 - 您现在已经确认。所以我回到第一段 - 最多只能对列中的一部分值求和。那是有用的信息吗?

最终,如果您需要这样做,那么您可以在查询中反转 sum/isnumeric 的相对位置。

select sum(case when isnumeric(CustomerID) = 1 
then cast(CustomerID as ...) else 0 end) as Column1
from dbo.Orders;

请记住,isnumeric 并不像人们预期的那样有用。您可以在论坛中搜索替代方案。如果你是当前版本的sql server,你可以使用try_cast而无需case/isnumeric的复杂性。

也许您的意思是计算每个客户的订单?

关于sql-server - 将数据类型 nvarchar 转换为数字异常时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082923/

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