gpt4 book ai didi

sql-server - CAST 和 IsNumeric

转载 作者:行者123 更新时间:2023-12-01 21:41:59 27 4
gpt4 key购买 nike

为什么以下查询会返回“将数据类型 varchar 转换为 bigint 时出错”? IsNumeric 不会使 CAST 安全吗?我已经尝试了转换中的每种数字数据类型,并得到相同的“转换错误...”错误。我不认为结果数字的大小是一个问题,因为溢出是一个不同的错误。

有趣的是,在 Management Studio 中,在错误返回之前,结果实际上会在结果 Pane 中显示一瞬间。

SELECT CAST(myVarcharColumn AS bigint)  
FROM myTable
WHERE IsNumeric(myVarcharColumn) = 1 AND myVarcharColumn IS NOT NULL
GROUP BY myVarcharColumn

有什么想法吗?

最佳答案

如果 varchar 值可以转换为任何数字类型,则 IsNumeric 返回 1。这包括 int、bigint、decimal、numeric、real 和 float。

科学计数法可能会给您带来问题。例如:

Declare @Temp Table(Data VarChar(20))

Insert Into @Temp Values(NULL)
Insert Into @Temp Values('1')
Insert Into @Temp Values('1e4')
Insert Into @Temp Values('Not a number')

Select Cast(Data as bigint)
From @Temp
Where IsNumeric(Data) = 1 And Data Is Not NULL

有一个技巧可以与 IsNumeric 一起使用,以便对于带有科学记数法的数字返回 0。您可以应用类似的技巧来防止小数值。

IsNumeric(YourColumn + 'e0')

IsNumeric(YourColumn + '.0e0')

尝试一下。

SELECT CAST(myVarcharColumn AS bigint)
FROM myTable
WHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULL
GROUP BY myVarcharColumn

关于sql-server - CAST 和 IsNumeric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/338075/

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