跳至內容
Astera Technology

旗標 yes 不過,文字 1 卻過?

明確比較本例文字真值代碼。

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

準備報表輸入

本例來源用原文字 yes 表示已選,no 未選,1 是未預期原代碼。WHERE flag_text 會用 SQLite 數字真值轉換,不按來源文字意思。

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

假設輸入:flags
編號原文字旗標
Ayes
Bno
C1
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE flags(id TEXT PRIMARY KEY,flag_text TEXT); INSERT INTO flags VALUES('A','yes'),('B','no'),('C','1');

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT id,flag_text FROM flags WHERE flag_text ORDER BY id;
錯誤查詢的逐行結果
編號原文字旗標
C1
下載可編輯 CSV ↓
更正 SELECT
SELECT id,flag_text FROM flags WHERE flag_text='yes' ORDER BY id;
更正查詢的逐行結果
編號原文字旗標
Ayes
下載可編輯 CSV ↓

錯誤只回 C=1,真正已選清單是 A=yes。未預期值仍留輸入另查。

用新副本測邊界

加 NULL 旗標 D,未確認 yes,不能入更正清單。

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

邊界改動及更正查詢
INSERT INTO flags VALUES('D',NULL);
SELECT id,flag_text FROM flags WHERE flag_text='yes' ORDER BY id;
邊界查詢的逐行結果
編號原文字旗標
Ayes
下載可編輯 CSV ↓

按本例文字代碼,哪項確認已選?

查看參考答案

只有 A,C 的文字 1 雖被數字運算當真,仍不是指定 yes。

相關資源