跳至內容
Astera Technology

TRIM 為何連報表標籤尾部字母也刪了?

只移除一次指定前綴,不把兩端字元集合都刪。

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

準備報表輸入

本例匯出只移一次開頭 AB。trim(code,'AB') 卻會把兩端所有 A、B 刪掉。須先查前綴再截取,不符前綴的代碼照留。

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

假設輸入:labels
編號代碼
1ABBA
2ABXAB
3CABA
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE labels(id INTEGER PRIMARY KEY,code TEXT NOT NULL); INSERT INTO labels VALUES(1,'ABBA'),(2,'ABXAB'),(3,'CABA');

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT id,trim(code,'AB') AS suffix FROM labels ORDER BY id;
錯誤查詢的逐行結果
編號後綴
1空字串(長度 0)
2X
3C
下載可編輯 CSV ↓
更正 SELECT
SELECT id,CASE WHEN substr(code,1,2)='AB' THEN substr(code,3) ELSE code END AS suffix FROM labels ORDER BY id;
更正查詢的逐行結果
編號後綴
1BA
2XAB
3CABA
下載可編輯 CSV ↓

ABBA 應成 BA、ABXAB 成 XAB,CABA 不改。錯誤值空白/X/C 說明 TRIM 不是移除前綴。

用新副本測邊界

正好 AB 的代碼,移完唯一前綴後後綴為空。

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

邊界改動及更正查詢
INSERT INTO labels VALUES(4,'AB');
SELECT id,CASE WHEN substr(code,1,2)='AB' THEN substr(code,3) ELSE code END AS suffix FROM labels ORDER BY id;
邊界查詢的逐行結果
編號後綴
1BA
2XAB
3CABA
4空字串(長度 0)
下載可編輯 CSV ↓

ABXAB 後綴應留甚麼?

查看參考答案

XAB,只移開頭一次 AB,末尾 AB 屬後綴。

相關資源