跳至內容
Astera Technology

數量匯出為何九排在十前?

已核數量文字按數值排,不藉此改識別碼。

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

準備報表輸入

本例已核數量是 0 至 9223372036854775807(兩端包括)的標準整數文字:2、10、9。文字排序比字串,不比數量。只在 ORDER BY 轉這個已訂數量欄,輸出仍保留原文字。

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

假設輸入:quantities
編號數量文字
A2
B10
C9
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE quantities(id TEXT PRIMARY KEY,units_text TEXT NOT NULL); INSERT INTO quantities VALUES('A','2'),('B','10'),('C','9');

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT id,units_text FROM quantities ORDER BY units_text DESC,id;
錯誤查詢的逐行結果
編號數量文字
C9
A2
B10
下載可編輯 CSV ↓
更正 SELECT
SELECT id,units_text FROM quantities ORDER BY CAST(units_text AS INTEGER) DESC,id;
更正查詢的逐行結果
編號數量文字
B10
C9
A2
下載可編輯 CSV ↓

文字由大至小是 9、2、10,數值則 10、9、2。排序只轉已訂 units_text 數量欄;不合法文字及超過 SQLite 有符號整數上限的數量,須在本查詢前拒收;CAST 超界可截到上限,不能保持數值先後。

用新副本測邊界

加 0 及範圍內最大的兩個數量 9223372036854775807、9223372036854775806,兩個大數仍按不同數值排列,0 最後。

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

邊界改動及更正查詢
INSERT INTO quantities VALUES('D','0'),('E','9223372036854775807'),('F','9223372036854775806');
SELECT id,units_text FROM quantities ORDER BY CAST(units_text AS INTEGER) DESC,id;
邊界查詢的逐行結果
編號數量文字
E9223372036854775807
F9223372036854775806
B10
C9
A2
D0
下載可編輯 CSV ↓

更正後哪項排第一?

查看參考答案

原表 B=10 在 C=9、A=2 前。加入邊界數量後,E=9223372036854775807 第一,F=9223372036854775806 第二,之後 B、C、A、D=0。

相關資源