跳至內容
Astera Technology

客戶編號轉成數字後,為甚麼兩個客戶撞號?

編號開首零有意思時,要保留文字,不能當數字整理。

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

先準備用來排查的資料

原系統明確把 001 及 1 當不同客戶。轉整數後兩者同為一,分組便合併。這是識別轉換出錯,不是找到重複客戶。保留原文字,除非目標已批准另一套可還原對照。

以下完整建表及資料只在新的 SQLite 測試資料庫執行。全部紀錄均為假設,數量以件計,輸入的 cents 金額欄以貨幣的分存整數;計算後的平均數可能不足整分。小型例子的各表均完整列在預覽。

假設輸入:source_customers
原編號假設名稱
001Demo A
1Demo B
下載可編輯 CSV ↓
可直接執行的完整測試資料
CREATE TABLE source_customers(external_id TEXT PRIMARY KEY,name TEXT);
INSERT INTO source_customers VALUES ('001','Demo A'),('1','Demo B');

重現錯誤結果,再核對更正

錯誤示範查詢:只用來重現問題
SELECT CAST(external_id AS INTEGER) AS target_key,COUNT(*) AS records FROM source_customers GROUP BY target_key ORDER BY target_key;
實際執行的錯誤示範結果
目標識別值筆數
12
下載可編輯 CSV ↓
更正後的 SQLite 查詢
SELECT external_id AS target_key,COUNT(*) AS records FROM source_customers GROUP BY external_id ORDER BY target_key;
更正查詢的實際結果
目標識別值筆數
0011
11
下載可編輯 CSV ↓

錯誤結果只有鍵值 1、兩筆;更正後兩個文字編號各一筆。看似數字的編號不是數量,轉完再補零也不知道原來是哪位客戶。

套用前先測邊界及資料範圍

再加第三個編號 0001,文字對照保留三個;轉整數則全部撞成同一個。

邊界測試要另開新的假設資料庫,重做完整建表及資料,只套用以下改動,再執行更正查詢。測試改動不可用於正式系統。

新假設副本內的邊界改動
INSERT INTO source_customers VALUES ('0001','Demo C');
改動後再執行更正查詢的實際結果
目標識別值筆數
00011
0011
11
下載可編輯 CSV ↓

此例明確採區分大小寫的文字識別;空編號、空格規則及英數字對照須另驗證。

以上錯誤、更正及邊界結果都已在 SQLite 執行,並與另行編寫的預期資料逐行核對。證據只適用於這組假設條件,未測其他資料庫、正式效能或你的現有資料結構。

相關資源