gpt4 book ai didi

sql - 将 varchar 转换为数据类型 numeric 时出现算术溢出错误。 '10' <= 9.00

转载 作者:行者123 更新时间:2023-12-02 08:21:01 25 4
gpt4 key购买 nike

下面是我正在使用的表结构和数据类型的子集。

CREATE TABLE #Test
(
Val varchar(5)
,Type varchar(5)
)

INSERT #Test VALUES ('Yes','Text')
INSERT #Test VALUES ('10','Int')
INSERT #Test VALUES ('10.00','Float')
INSERT #Test VALUES ('9.00','Float')
INSERT #Test VALUES ('9','Int')

我想编写一个查询,让我知道列“Val”是否 <= 9.00(必须是数字数据类型)。我通过执行以下操作来做到这一点:

SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
) IntsOnly
WHERE IntsOnly.Val <= 9.00

这给了我一个算术溢出错误。但是,如果我排除值为“10”的数据行:

SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
AND Val <> '10'
) IntsOnly
WHERE IntsOnly.Val <= 9.00

它可以正常工作,没有任何问题。 我的问题不是如何解决这个问题,因为我知道我可以简单地将数据转换为我需要的格式。

我的问题是为什么“Val”列中的“10”值返回错误。当然,逻辑应该只返回“False”并简单地排除行,因为“10”(我假设是隐式转换的)大于 9.00。

谢谢。

最佳答案

这会生成算术溢出,因为它试图将 Val 列隐式转换为 NUMERIC(3,2),这自然会在 10 等 2 位值上溢出。

它使用 NUMERIC(3,2) 作为目标类型和大小,因为这是 9.00 看起来适合的最小数字。

解决方案当然是使用显式 CAST,而不是隐式执行

关于sql - 将 varchar 转换为数据类型 numeric 时出现算术溢出错误。 '10' <= 9.00,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161264/

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