[英]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.