例如,我正在使用這個網站:https ://sqliteonline.com/ 。
我嘗試模糊查詢并這樣做:
SELECT * FROM demo
WHERE Name="SQL " || "Online"
哪個正確檢索:
1-SQL Online-for Data Science
現在我嘗試使用AND運算子:
SELECT * FROM demo
WHERE Name="SQL " || "Online" AND Hint=1 IS NOT 2
它檢索到與以前相同的答案,因為1它確實不是2這樣Query AND True=>True。
但是,如果我將其更改為其他內容,則可以說:
SELECT * FROM demo
WHERE Name="SQL " || "Online" AND Hint=1 IS NOT 1
它回傳與以前相同的答案!即使1 IS NOT 1是完全錯誤的,正如我在這個查詢中看到的那樣:
SELECT *, 1 IS NOT 1 AS isTrue FROM demo
WHERE Name="SQL " || "Online" AND Hint=1 IS NOT 1
在哪里isTrue=0
所以這個查詢基本上就是這個:
SELECT *, 1 IS NOT 1 AS isTrue FROM demo
WHERE Name="SQL " || "Online" AND Hint=0
但是當我顯式執行此查詢時,它不會檢索任何結果!
這里發生了什么?我會很感激你的幫助!謝謝你。
uj5u.com熱心網友回復:
根據Operators 和 Parse-Affecting Attributes,您的條件相當于:
(Name=("SQL " || "Online")) AND ((Hint=1) IS NOT 2)
因為運算子優先級。
這意味著Hint=1檢查它是否是布爾運算式2。
布爾運算式 likeHint=1被評估為0forfalse或1for true。
columnHint的值是字串,在與1或任何數值運算式進行比較之前,SQLite 會嘗試將它們隱式轉換為數值,但由于不可能將它們轉換為0,因此,您的條件相當于:
(Name=("SQL " || "Online")) AND ((0=1) IS NOT 2)
并且由于0=1計算為0(= false):
(Name=("SQL " || "Online")) AND (0 IS NOT 2)
要么:
(Name=("SQL " || "Online")) AND true
要么:
Name="SQL " || "Online"
請注意,您將獲得相同的結果:
(Name=("SQL " || "Online")) AND ((Hint=1) IS NOT 1)
但是,隨著
(Name=("SQL " || "Online")) AND ((Hint=1) IS NOT 0)
結果將是:
(Name=("SQL " || "Online")) AND false
其評估結果為false。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446890.html
標籤:sql sqlite 类型转换 where子句 运算符优先级
上一篇:SQL從調查中查找課程受歡迎程度
