為了使用數值對 PostgreSQL 14 varchar 列進行排序,我使用了由
CREATE COLLATION de_pos (LOCALE = 'de-DE-u-kn-true', PROVIDER = 'icu');`
使用這樣的排序規則 ORDER BY 會產生像這樣的正確順序
1.2.10
1.2.20
1.2.100
沒有那個特殊的排序規則 ORDER BY 結果是
1.2.10
1.2.100
1.2.20
我想知道,該歸類定義的每一部分究竟意味著什么?
de-DE => 德國-德國的語言環境
u => UTF8 ????
kn => ????
真的 => ????
uj5u.com熱心網友回復:
請參閱PostgreSQL 檔案中的ICU 排序規則。這鏈接到 ICU 檔案,該檔案 - 通過一些間接方式 - 導致Unicode Locale Identifier,這清楚地表明-uUnicode Locale Extensions 引入了,并且kn是這些擴展之一。當您查看Collat??ion Settings 時,您會發現kn配置數字排序。這true是該選項的配置(意思是,數字排序開啟):
如果設定為on,則任何十進制數字序列([UAX44] 中的 General_Category = Nd)將以其數值在主要級別進行排序。例如,“A-21”<“A-123”。計算出的主要權重都在數字重新排序組的開頭。因此,對于未定制的 UCA 表,“a$”<“a0”<“a2”<“a12”<“a?”<“aa”。
這有時被稱為“自然排序順序”。
換句話說,de-DE-u-kn-true就是:
de: 語言德語DE: 德國地區u: 以下是 Unicode 語言環境擴展kn: Unicode Locale Extension 數字排序true: 的值kn,表示數字排序開啟
uj5u.com熱心網友回復:
您可以通過指定屬性名稱來自定義排序規則的排序行為。在這種情況下,kn-true 代表自然排序順序或基于數字值對數字進行排序的數字排序順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349953.html
標籤:sql PostgreSQL 整理
