跳至內容
Astera Technology

代碼欄用 BINARY,LIKE 為何仍配到小寫前綴?

本例英文字母前綴須分大小寫,要選相應格式運算符。

下載完整個案資料及參考答案 ↓

準備報表輸入

本例 Ab、ab 是不同前綴。SQLite LIKE 平常不分英文字母大小寫,欄位用 BINARY 比較也不改此特性。本例固定字面前綴 Ab,改用 GLOB Ab* 分大小寫。

以下記錄及報表規則均為原創假設。在新 SQLite 測試資料庫重做建表,預覽包含此小型例子每張表。

假設輸入:codes
代碼
Ab1
Ax3
ab2
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE codes(code TEXT COLLATE BINARY PRIMARY KEY); INSERT INTO codes VALUES('Ab1'),('ab2'),('Ax3');

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT code FROM codes WHERE code LIKE 'Ab%' ORDER BY code;
錯誤查詢的逐行結果
代碼
Ab1
ab2
下載可編輯 CSV ↓
更正 SELECT
SELECT code FROM codes WHERE code GLOB 'Ab*' ORDER BY code;
更正查詢的逐行結果
代碼
Ab1
下載可編輯 CSV ↓

LIKE 留 Ab1、ab2,GLOB 只留 Ab1。GLOB 另有萬用字元格式,前綴若不限本例固定文字,要另處理字面字元或用截取比較。

用新副本測邊界

加全大寫 AB4,也不符合分大小寫的 Ab 前綴。

另開新資料庫重做原建表,才套下列改動及更正查詢。空結果在表內用已標明空結果文字表示,不是假資料行。

邊界改動及更正查詢
INSERT INTO codes VALUES('AB4');
SELECT code FROM codes WHERE code GLOB 'Ab*' ORDER BY code;
邊界查詢的逐行結果
代碼
Ab1
下載可編輯 CSV ↓

AB4 要加入更正結果嗎?

查看參考答案

不用,第二字 B 不等於指定小寫 b,仍只有 Ab1。

相關資源