我需要獲取特定於區域設置的最接近的字符,該值大於(在字符串比較中)給定的postgresql中的字符。我試圖用如何獲得大於postgresql中給定的最接近的字符?
SELECT chr(ascii(x)+1);
但是當我測試了一下,沒有有時我希望的方式工作,爲
SELECT chr(ascii('я')+1);
回報ѐ,但
SELECT 'я' < 'ѐ';
返回false 。
我需要獲取特定於區域設置的最接近的字符,該值大於(在字符串比較中)給定的postgresql中的字符。我試圖用如何獲得大於postgresql中給定的最接近的字符?
SELECT chr(ascii(x)+1);
但是當我測試了一下,沒有有時我希望的方式工作,爲
SELECT chr(ascii('я')+1);
回報ѐ,但
SELECT 'я' < 'ѐ';
返回false 。
文本的排序順序取決於lc_collate
,而不是ASCII代碼或Unicode代碼點。 這些恰巧與大多數語言環境中的基本ASCII字符並行。其餘可能會有所不同。
你的輸出是show lc_collate
?
您期待的行爲僅適用於區域設置C
。閱讀所有關於它in the fine manual:
C和POSIX排序規則這兩者僅ASCII字母「A」到「Z」指定「傳統C」的行爲,在 被視爲字母, 和排序完成嚴格按字符代碼字節值。
強調我的。 PostgreSQL 9.1擁有一些用於整理的新功能。
lc_collate ------------- en_US.UTF- 8 –
@ Pupkov-Zadnij:你有答案,我不知道從頭頂上看,如何得到下一個特定於地區的字符,Docs可能會提供信息 –
所以不可能只是得到下一個字符將會比給定的字符更大,如果它不在區域C中?o_O更新:赦免,沒有看到您的評論... –
在除C/POSIX以外的語言環境中,如果沒有詳盡的搜索,這通常是不可能的。你最好重新考慮你的要求。
如果您只是在實踐中處理有限的問題空間,例如俄語或拉丁字母,我建議您在應用程序的某處放置明確的信函列表。但是,如果你需要這個工作的任何Unicode字符或字符串,你會有一些問題。
是яASCII?我確信它不是。 – Corbin
'ascii'函數必須根據規範 –
「ASCII代碼中的第一個字符的ASCII碼返回非ASCII字符的數字,UTF8返回字符的Unicode代碼點,對於其他多字節編碼,參數必須成爲一個ASCII字符。「對於UTF8,這是事實。你的數據是UTF8嗎?如果是這樣,我應該先閱讀文檔:)。 (雖然可以說Postres應該在邏輯上命名它們的功能。) – Corbin