Sqlite

Sqlite 規格:4.2。比較之前的類型轉換

  • May 2, 2022

基於 Sqlite 文件:https://www.sqlite.org/datatype3.html#type_conversions_prior_to_comparison,尤其是這個語句:

如果一個操作數具有 INTEGER、REAL 或 NUMERIC 親和性,而另一個操作數具有 TEXT 或 BLOB 或沒有親和性,則將 NUMERIC 親和性應用於其他操作數。

我期望以下查詢:

CREATE TABLE t (id integer primary key, str varchar(20));
INSERT INTO t (id, str) VALUES (1, '5'), (2, '5u');

SELECT id, 5 = str, 5 >= str, CAST(5 AS NUMERIC) >= str, CAST(str AS NUMERIC) FROM t;

為兩行返回5 >= str= 1,因為左側操作數具有 NUMERIC 親和性。

展示:http ://sqlfiddle.com/#!5/e9c19/4

我想你可能會錯過這部分

使用 CAST 運算符,即使轉換有損且不可逆,轉換也始終發生,而列親和性僅在更改是無損且可逆的情況下更改值的數據類型

(強調我的)。

引用自:https://dba.stackexchange.com/questions/311555