2016-03-04 10 views
5

this questionのもともと一部が、それは少し無関係だったので、私はそれ自身のの疑問作ることにしました。)演算子〜<〜Postgresの

に私はオペレータ~<~が何であるかを見つけることができません。 Postgresのマニュアルには、~と同様の演算子hereしか記載されていませんが、記号は~<~です。

SELECT * FROM test ORDER BY name USING ~<~; 
SELECT * FROM test ORDER BY name COLLATE "C"; 

そして、これらは逆の順序与える::また

SELECT * FROM test ORDER BY name USING ~>~; 
SELECT * FROM test ORDER BY name COLLATE "C" DESC; 

チルダ演算子のいくつかの情報をpsqlのコンソールでいじって、私はこれらのコマンドは、同じ結果を与えることが判明

\do ~*~ 
            List of operators 
    Schema | Name | Left arg type | Right arg type | Result type |  Description  
------------+------+---------------+----------------+-------------+------------------------- 
pg_catalog | ~<=~ | character  | character  | boolean  | less than or equal 
pg_catalog | ~<=~ | text   | text   | boolean  | less than or equal 
pg_catalog | ~<~ | character  | character  | boolean  | less than 
pg_catalog | ~<~ | text   | text   | boolean  | less than 
pg_catalog | ~>=~ | character  | character  | boolean  | greater than or equal 
pg_catalog | ~>=~ | text   | text   | boolean  | greater than or equal 
pg_catalog | ~>~ | character  | character  | boolean  | greater than 
pg_catalog | ~>~ | text   | text   | boolean  | greater than 
pg_catalog | ~~ | bytea   | bytea   | boolean  | matches LIKE expression 
pg_catalog | ~~ | character  | text   | boolean  | matches LIKE expression 
pg_catalog | ~~ | name   | text   | boolean  | matches LIKE expression 
pg_catalog | ~~ | text   | text   | boolean  | matches LIKE expression 
(12 rows) 

3番目と4番目の行は、私が探している演算子ですが、desc riptionは私にとっては少し不十分です。

+0

この演算子は、ルックアップのためのPostgresで使用されています。 http://www.postgresql.org/docs/9.5/static/indexes-opclass.html –

+0

'test(name text_pattern_ops)'にインデックスを作成し、 'name LIKE 'abc%''の 'EXPLAIN'出力を見てください –

答えて

4

~>=~~<=~~>~~<~textパターン(又はvarchar、基本的には同じ)演算子、それぞれの兄弟>=<=><の対応物です。文字データは、厳密にはバイト値で並べ替えられ、(兄弟とは対照的に)照合設定のルールは無視されます。これによりそれらの処理速度は向上しますが、ほとんどの言語/国では無効になります。

"C"ロケールは実質的にロケールなしと同じです。これは照合ルールがないことを意味します。それはなぜORDER BY name USING ~<~ORDER BY name COLLATE "C"が同じことをするのかを説明します。 dba.SEでこの関連の答えの最後の章で

詳細説明:SQL LIKE expressionを実装するために使用Postgresの演算子である~~こと


注意と上記に殆ど関係ないです。同様に、~~*ILIKEを実装します。詳細:あなたがOPCLASSでインデックスを持っている場合

+0

答えてくれてありがとうございます。特に、 "COLLATE" C "'との関係を指摘してくれてありがとうございます。 私は質問をする前にdba.SEであなたの答えを読んでいましたが、どういうわけか '〜<〜'演算子でその部分を見逃しました。 –

関連する問題