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

时间:2018-02-07 13:25:47

标签: sql

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

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

5 个答案:

答案 0 :(得分:0)

您正在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'); 列表仅支持一种类型的值。如果混合字符串和数字,则字符串将转换为数字。并且您收到错误,因为该字符串不代表有效数字。

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

gridfs-stream

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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)

答案 3 :(得分:0)

由于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.

答案 4 :(得分:0)

定义,请注意您在条件中使用两种类型的数据。

JOIN

就这样:

country_id