如果我使用 collat??e 執行 postgresql 腳本,我得到的結果只用 '.' 排序。它不會考慮“__”。我想要特殊字符 '.' 和 '_' 先排序,然后是字母。
PostgreSQL:
SELECT * FROM test_spl_char ORDER BY CHR_NM COLLATE "C";
Output:
-----------
.GEMS
BISCUIT
CANDY
DONUT
YUM
_SHAKE
show lc_collate;
Output:
-----------
en_US.UTF-8
請幫助我首先使用特殊字符對結果進行排序。
uj5u.com熱心網友回復:
實際上,它確實考慮了.和_,并且做得恰到好處。您希望所有特殊字符都排在錯誤的標準字母數字之前;特殊字符散布在字母和數字中。通過查看每個字符的第一個字符的 ASCII 代碼(通過Postgres 函式),您可以從您的資料中看到這一點:
select char_nm, ascii(substr(char_nm,1,1))
from test_spl_char
order by char_nm collate "C";
請注意,結果實際上是根據 ASCII 代碼(內部代碼)正確排序的。
您可以使用正則運算式獲取您要查找的內容,以確定“類”并對其進行排序,然后對實際值進行排序:
select *
from test_spl_char
order by char_nm ~ '^[A-Za-z0-9]'
, char_nm ;
它的作用:正則運算式char_nm ~ '^[A-Za-z0-9]檢查字串的第一個字符,然后檢查字母數字字符。如果是,則回傳 True 而不是 False。由于 Postgres 認為 false 少于真正的特殊字符(非字母數字字符)將整理得較低,因此在升序中排在第一位。然后整個值也升序排序。
請參閱上面的演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364018.html
標籤:PostgreSQL的 排序 整理
