PostgreSQL:在文字欄位上做數字排序

如何在 text/varchar 欄位上以數字順序排序(使用 ICU collation)。

當你在 text 或 varchar 欄位上使用 ORDER BY 時,通常會得到這種結果——排序不是按照數字值,而是字串字典序。

postgres-sort-numeric-01.png

若你需要以下結果,可這樣對 text/varchar 欄位做數字排序。

postgres-sort-numeric-02.png

以數字排序改動欄位

CREATE COLLATION numeric (provider = icu, locale = 'en@colNumeric=yes');

ALTER TABLE "your_table" ALTER COLUMN "your_column" type TEXT COLLATE numeric;

更多細節與例子

-- 查看此資料庫中所有 collations
SELECT * FROM pg_collation;

-- 建立新的 collation
CREATE COLLATION your_new_collation_name (provider = icu, locale = 'en@colCaseFirst=upper;colNumeric=yes');

en: locale(可省略)
colCaseFirst: upper | lower | false
colNumeric: yes | no

-- 省略 locale
CREATE COLLATION your_new_collation_name (provider = icu, locale = '@colCaseFirst=upper;colNumeric=yes');

更多詳情:

https://www.postgresql.org/docs/14/collation.html

https://github.com/unicode-org/cldr/blob/main/common/bcp47/collation.xml

關於 Venusafe

Venusafe 為香港企業打造高效能 Web 應用(常使用 Elixir/Phoenix 與 PostgreSQL)。歡迎了解我們的 即時網絡應用,或 聯絡 Venusafe

獲取實用更新,絕無垃圾郵件。