gpt4 book ai didi

sql-server - SQL Server ISNUMERIC() 说明

转载 作者:行者123 更新时间:2023-12-05 08:55:05 24 4
gpt4 key购买 nike

我有一个表 X,其中包含一个帐号列表。此字段 (accoutNo) 是 nvarchar(8)。现在这里的问题是有时我们也会在该字段中获取字符,我想将其转换为 bigint。

抱歉,我无法将其以表格格式放在这里。

我可以检查 accountNo 是否是一个数值:

select x.accountNo from x where ISNUMERIC(x.accountNo)=1

但是当我尝试仅在 accountNo 为数字时转换值时,我仍然不能,我很困惑:

select x.accountNo, convert(bigint,x.accountNo) from x where ISNUMERIC(x.accountNo)=1

我收到的具体错误:

Msg 8114, Level 16, State 5, Line 1 Error converting data type nvarchar to bigint.

示例数据

accountNo  A0001001  A0001002  A0001003  /0005856  !0005046  ~0005872     A.005698 A/005623 A./00578 ./214536

最佳答案

您应该改用 CAST()TRY_CAST():

declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure

此外,重要的是要指出 ISNUMERIC() 并不完美。来自 docs :

ISNUMERIC returns 1 for some characters that are not numbers, such as plus (+), minus (-), and valid currency symbols such as the dollar sign ($). For a complete list of currency symbols, see money and smallmoney (Transact-SQL).

出于这个原因,我认为逻辑检查在这里没有值(value)。最好对所有值使用 TRY_CAST(),无论是否存在字符,并以可预测的方式处理空响应。

关于sql-server - SQL Server ISNUMERIC() 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212000/

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