gpt4 book ai didi

sql-server - 查找表中值无法转换为 int 的行

转载 作者:行者123 更新时间:2023-12-03 01:31:15 25 4
gpt4 key购买 nike

我需要一种方法来检测 MSSQL 表中包含无法转换为 int 的 varchar 条目的行。

我正在开发的系统在一个地方使用可编辑的 varchar 字段,并将其连接到另一个地方的整数列。如果 varchar 字段中包含无效数字(空白、带有 alpha 或符号,或者是超过 21 亿的数字(最大 int 大小)),则另一个查询会失败,表示值 xyz 溢出了 int 列,或者可能不被转换。

我想出了以下部分解决方案来查找违规记录:

select g.id, g.membernumber from groups g
left join secondary_groups sg on sg.id=g.id
where convert(bigint, g.membernumber) > 2147483647
or isnumeric(g.membernumber) = 0

这对于大多数情况都适用,但后来我意识到,如果您的 varchar 值超过“bigint”,它可能会失败。是否有更通用的方法来定位这些类型的记录,而不是使用强制转换/转换?如果有一个“IsInt()”的内置方法那就太棒了,但是可惜......

最佳答案

从 SQL Server 2012 开始,您可以使用 TRY_CAST当无法执行转换时返回 NULL 的表达式:

select * from table
where TRY_CAST(Value as int) is null

请注意,TRY_CAST 使用与 CAST 相同的转换规则,例如它将空白字符串转换为 0。这在您的情况下不是问题,但在 SQL 外部使用转换结果时应考虑。

还有类似的TRY_CONVERT表达式与 CONVERT 具有相同的语法,但需要将数据库兼容性级别更改为 120 或更高,而 TRY_CAST 也适用于 100。

关于sql-server - 查找表中值无法转换为 int 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157781/

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