sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLの誤った並べ替え

    テキストの並べ替え動作(charを含む) およびvarchar text タイプ)は現在の照合によって異なります あなたのロケールの。

    以前の密接に関連する質問を参照してください:

    • PostgreSQLソート
    • https://stackoverflow.com/q/21006868/398670

    ローカル言語のルールに従って適切にローカライズされたソートではなく、ASCII値による単純なソートを実行する場合は、COLLATEを使用できます。 条項

    select * 
    from test
    order by title COLLATE "C" ASC
    

    または、データベースの照合をグローバルに変更します(ダンプとリロード、または完全なインデックスの再作成が必要です)。私のFedora19Linuxシステムでは、次の結果が得られます:

    regress=> SHOW lc_collate;
     lc_collate  
    -------------
     en_US.UTF-8
    (1 row)
    
    regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#')) 
              SELECT title FROM v ORDER BY title ASC;
     title 
    -------
     #
     a
     #a
     a#
     a#a
    (5 rows)
    
    regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#')) 
              SELECT title FROM v ORDER BY title COLLATE "C" ASC;
     title 
    -------
     #
     #a
     a
     a#
     a#a
    (5 rows)
    

    PostgreSQLはオペレーティングシステムの照合サポートを使用するため、結果がホストOSごとにわずかに異なる可能性があります。特に、Mac OS Xの少なくとも一部のバージョンでは、Unicodeの照合処理が大幅に壊れています。



    1. 日付形式(DBまたは出力)をdd / mm/yyyyに変更します-PHPMySQL

    2. MicrosoftSQLServerデータベースで保存データを検索する

    3. 時間をiPhoneデバイスのタイムゾーンに変換するにはどうすればよいですか?

    4. RでOracleデータベースに接続するにはどうすればよいですか?