gpt4 book ai didi

tsql - 如何在非数字字段上查询 'between' 数字数据?

转载 作者:行者123 更新时间:2023-12-04 10:58:07 25 4
gpt4 key购买 nike

我刚刚在数据库中发现了一个查询,该查询失败导致报告失败。查询的基本要点:

Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
And Convert(int, myField) Between @StartRange And @EndRange

现在,myField 不包含所有行中的数字数据[它是 nvarchar 类型]...但这个查询显然是这样设计的,它只关心这个字段中的数据是数字的行。

问题在于 T-SQL(据我所知)不会短路 Where 子句,从而导致它丢弃数据不是数字的记录,但异常(exception)情况是:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '/A' to data type int.

没有将 myField 为数字的所有行转储到临时表中,然后查询该字段在指定范围内的行,我该怎么做才是最佳的?

我的第一次解析纯粹是为了分析返回的数据并查看发生了什么:
Select *
From (
Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
) t0
Where Convert(int, myField) Between @StartRange And @EndRange

但是我遇到了与第一个查询相同的错误,我不确定我是否理解,因为此时我没有转换任何不应该是数字的数据。子查询应该只返回 myField 包含数字数据的行。

也许我需要我的早茶,但这对任何人都有意义吗?另一组眼睛会有所帮助。

提前致谢

最佳答案

IsNumeric 仅告诉您字符串可以转换为 SQL Server 中的数字类型之一。它可能能够将其转换为货币或浮点数,但可能无法将其转换为整数。

改变你的

IsNumeric(myField) = 1

成为:
not myField like '%[^0-9]%' and LEN(myField) < 9

(也就是说,您希望 myField 仅包含数字,并且适合整数)

编辑示例:
select ISNUMERIC('.'),ISNUMERIC('£'),ISNUMERIC('1d9')

结果:
----------- ----------- -----------
1 1 1

(1 row(s) affected)

关于tsql - 如何在非数字字段上查询 'between' 数字数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760355/

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