PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

गैर-असीसी वर्णों की जांच करने के लिए Postgresql बाधा

आप ASCII . को परिभाषित कर सकते हैं ordinal 1 to 127 . के रूप में इस उद्देश्य के लिए, इसलिए निम्न क्वेरी "गैर-असीसी" मानों वाली एक स्ट्रिंग की पहचान करेगी:

SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);

लेकिन यह अति-कुशल होने की संभावना नहीं है, और उपश्रेणियों का उपयोग आपको इसे एक CHECK बाधा के बजाय एक ट्रिगर में करने के लिए मजबूर करेगा।

इसके बजाय मैं नियमित अभिव्यक्ति का उपयोग करता हूं। यदि आप चाहते हैं सभी प्रिंट करने योग्य वर्ण तो आप चेक बाधा में एक श्रेणी का उपयोग कर सकते हैं, जैसे:

CHECK (my_column ~ '^[ -~]*$')

यह स्पेस से लेकर टिल्ड तक सब कुछ मैच करेगा , जो मुद्रण योग्य ASCII श्रेणी है।

यदि आप सभी ASCII, प्रिंट करने योग्य और गैरमुद्रण योग्य चाहते हैं, तो आप बाइट एस्केप का उपयोग कर सकते हैं। :

CHECK (my_column ~ '^[\x00-\x7F]*$')

सबसे सख्ती से सही तरीका होगा convert_to(my_string, 'ascii') और अगर यह विफल हो जाता है तो एक अपवाद उठाया जाता है ... लेकिन PostgreSQL ascii . की पेशकश नहीं करता है (यानी 7-बिट) एन्कोडिंग, ताकि दृष्टिकोण संभव न हो।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेएसक्यूएल के लिए बर्मन 1.0, बैकअप और रिकवरी मैनेजर की घोषणा

  2. कमांड लाइन से postgresql के साथ प्रमाणीकरण विफल त्रुटि प्राप्त करना

  3. पोस्टग्रेज/पोस्टगिस डेटाबेस में osm फ़ाइल आयात करना

  4. रेल/ActiveRecord में अनुमत एनयूएलएल के साथ अद्वितीय अनुक्रमणिका निर्दिष्ट करना संभव है?

  5. पोस्टग्रेज:प्रति डेवलपर सबसे लंबी स्ट्रीक (दिनों में) को परिभाषित करना