繁体   English   中英

具有多个OR条件的Where子句中的错误

[英]error in Where clause with multiple OR conditions

为什么下面的查询不起作用? 我需要获取以下每个数字的数据:

select * 
from dbo.BAS_GDW_TMO_PARCEL_EBILL_ALL_ARCHIVE_AUDIT_RESULT_TBL
where TMO_TRACK_NBR in (964855234, 141329655, 138150364, '3F3857')

您正在IN中混合类型。 IN列表仅支持一种类型的值。 如果您混合使用字符串和数字,则字符串将转换为数字。 而且您会收到错误消息,因为字符串不代表有效数字。

不要混合类型。 使用适当的类型进行比较。 如果TMO_TRACK_NBR是字符串,则对所有值使用字符串:

select * 
from dbo.BAS_GDW_TMO_PARCEL_EBILL_ALL_ARCHIVE_AUDIT_RESULT_TBL
where TMO_TRACK_NBR in ('964855234', '141329655', '138150364', '3F3857');

根据SQL IN文档https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/in-transact-sql

是要测试匹配项的表达式列表。 所有表达式必须与test_expression具有相同的类型

您正在IN子句中测试整数值(964855234)和字符串('3F3857')。

您必须检查数据类型是否为TMO_TRACK_NBR列并使用正确的数据类型测试数据

in子句中的所有数据应为同一类型

所以应该是这个

select * 
from dbo.BAS_GDW_TMO_PARCEL_EBILL_ALL_ARCHIVE_AUDIT_RESULT_TBL
where TMO_TRACK_NBR in ('964855234', '141329655', '138150364', '3F3857')

或这个

select * 
from dbo.BAS_GDW_TMO_PARCEL_EBILL_ALL_ARCHIVE_AUDIT_RESULT_TBL
where TMO_TRACK_NBR in (964855234, 141329655, 138150364, 3F3857)

由于TMO_TRACK_NBR可以包含F,因此它告诉我它不是INT。 如果您也不要将引号放在其他数字周围,则IN操作将尝试将所有引号都转换为INT(包括“ 3F3857”)。

select * 
from dbo.BAS_GDW_TMO_PARCEL_EBILL_ALL_ARCHIVE_AUDIT_RESULT_TBL 
where TMO_TRACK_NBR in ('964855234', '141329655', '138150364', '3F3857')

下次放置错误应该很好。 我想你得到了:

Conversion failed when converting the varchar value '3F3857' to data type int.

明确地,原因是您在条件中使用两种类型的数据。

    select * 
    from dbo.BAS_GDW_TMO_PARCEL_EBILL_ALL_ARCHIVE_AUDIT_RESULT_TBL
    where TMO_TRACK_NBR in (
964855234 --int
, 141329655 --int
, 138150364 --int
, '3F3857' --varchar
)

就是这样:

select * 
from dbo.BAS_GDW_TMO_PARCEL_EBILL_ALL_ARCHIVE_AUDIT_RESULT_TBL
where TMO_TRACK_NBR in (
'964855234' --varchar
, '141329655' --varchar
, '138150364' --varchar
, '3F3857' --varchar
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM