2016-03-04 16 views
5
में

(मूलतः this question का हिस्सा है, लेकिन यह थोड़ा अप्रासंगिक था, इसलिए मैं यह अपने आप में एक सवाल बनाने का फैसला किया।)ऑपरेटर ~ <~ Postgres

मैं नहीं मिल सकता है क्या ऑपरेटर ~<~ है। पोस्टग्रेस मैनुअल में केवल ~ और इसी तरह के ऑपरेटर here का उल्लेख है, लेकिन ~<~ का कोई संकेत नहीं है।

जब psql कंसोल में नगण्य, मुझे पता चला है कि इन आदेशों एक ही परिणाम दे:

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; 

इसके अलावा टिल्ड ऑपरेटरों पर कुछ जानकारी :

\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) 

तीसरी और चौथी पंक्तियां ऑपरेटर है जिसे मैं ढूंढ रहा हूं, लेकिन desc ription मेरे लिए थोड़ा अपर्याप्त है।

+0

इस ऑपरेटर देखने के लिए Postgres द्वारा किया जा रहा है अगर तुम opclass साथ एक सूचकांक है। http://www.postgresql.org/docs/9.5/static/indexes-opclass.html –

+0

'test (name text_pattern_ops) 'पर एक अनुक्रमणिका बनाएं और' नाम LIKE' abc% 'के लिए' EXPLAIN' आउटपुट देखें ' –

उत्तर

4

~>=~, ~<=~, ~>~ और ~<~text पैटर्न (या varchar, मूलतः एक ही) ऑपरेटरों, अपने-अपने भाई बहन >=, <=, > और < के समकक्षों कर रहे हैं। वे किसी भी संयोजन सेटिंग (उनके भाई बहनों के विपरीत) के नियमों को अनदेखा करते हुए, उनके बाइट मान द्वारा कड़ाई से चरित्र डेटा क्रमबद्ध करते हैं। यह उन्हें तेजी से बनाता है, लेकिन अधिकांश भाषाओं/देशों के लिए भी अमान्य है।

"सी" लोकेल प्रभावी रूप से कोई लोकेल जैसा नहीं है, जिसका अर्थ है कोई संयोजन नियम नहीं। यह बताता है कि क्यों ORDER BY name USING ~<~ और ORDER BY name COLLATE "C" ऐसा करने के अंत में।

dba.SE पर इस संबंधित जवाब के आखिरी अध्याय में विस्तृत विवरण:


ध्यान दें कि ~~SQL LIKE expression लागू करने के लिए इस्तेमाल किया Postgres ऑपरेटर है और उपरोक्त में से संबंधित है। इसी तरह, ~~* लागू ILIKE। अधिक:

+0

उत्तर के लिए धन्यवाद, विशेष रूप से 'COLLATE "सी'' के संबंध को इंगित करने के लिए। मैंने अपने प्रश्न पूछने से पहले dba.SE पर भी अपना उत्तर पढ़ा, लेकिन किसी भी तरह से मैंने '~ <~ 'ऑपरेटर के साथ भाग को याद किया। –

संबंधित मुद्दे