簡體   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