2017-01-24 32 views
2

我有一個表以下數據爲什麼MySQL的比較 「IN」 作爲一個像

表交易

trasaction_id 
886 
456 
654_asd 
898_ASDF 

如果我用這些句子

SELECT trasaction_id from transactions where transaction_id IN (886,654) 

我期待的結果是886,

但是mysq l正在返回886,654_ASDF

爲什麼在該查詢中返回654_ASDF

+0

什麼是'trasaction_id' [原文]列的類型? –

+3

''654_asd''被強制爲int。 'SELECT 654 ='654_asd'== 1' –

回答

4

發生這種情況是因爲transaction_id是一個字符串,但您的比較值是數字。因此,使用「無聲轉換」將transaction_id轉換爲數字。這意味着錯誤不會被報告。

轉換不是真的使用like。它將字符串的前導字符轉換爲數字,如果它們看起來像一個數字。子序列字符被忽略。

所以,只要使用正確的類型:

SELECT trasaction_id 
FROM transactions 
WHERE transaction_id IN ('886', '654'); 
相關問題