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

पोस्टग्रेज:CAST विफलताओं के लिए एक डिफ़ॉल्ट मान परिभाषित करें?

CAST के लिए कोई डिफ़ॉल्ट मान नहीं है:

<ब्लॉकक्वॉट>

एक प्रकार का कास्ट एक डेटा प्रकार से दूसरे डेटा प्रकार में रूपांतरण निर्दिष्ट करता है। PostgreSQL टाइप कास्ट के लिए दो समान सिंटैक्स स्वीकार करता है:

CAST ( expression AS type )
expression::type

कास्ट किए जाने वाले एक्सप्रेशन और वांछित लक्ष्य प्रकार के अलावा किसी अन्य चीज़ के लिए सिंटैक्स में कोई जगह नहीं है।

हालांकि, आप इसे एक साधारण कार्य के साथ हाथ से कर सकते हैं:

create or replace function cast_to_int(text, integer) returns integer as $$
begin
    return cast($1 as integer);
exception
    when invalid_text_representation then
        return $2;
end;
$$ language plpgsql immutable;

फिर आप cast_to_int('pancakes', 0) . जैसी बातें कह सकते हैं और 0 प्राप्त करें ।

PostgreSQL आपको अपनी कास्ट बनाने की सुविधा भी देता है ताकि आप इस तरह के काम कर सकें:

create or replace function cast_to_int(text) returns integer as $$
begin
    -- Note the double casting to avoid infinite recursion.
    return cast($1::varchar as integer);
exception
    when invalid_text_representation then
        return 0;
end;
$$ language plpgsql immutable;

create cast (text as integer) with function cast_to_int(text);

तब आप कह सकते हैं

select cast('pancakes'::text as integer)

और 0 प्राप्त करें या आप कह सकते हैं

select cast(some_text_column as integer) from t

और 0 प्राप्त करें some_text_column . के लिए वे मान जो मान्य पूर्णांक नहीं हैं। अगर आप varchar cast डालना चाहते हैं इस ऑटो-डिफॉल्टिंग कास्ट का उपयोग कर रहे हैं तो आपको डबल कास्ट करना होगा:

select cast(some_varchar::text as integer) from t

सिर्फ इसलिए कि आप ऐसा कर सकते हैं, यह एक अच्छा विचार नहीं है। मुझे नहीं लगता कि मानक टेक्स्ट को पूर्णांक कास्ट में बदलना अब तक का सबसे अच्छा विचार है। उपरोक्त दृष्टिकोण के लिए आपको मानक varchar . छोड़ने की भी आवश्यकता है से integer अकेले कास्ट करें, यदि आप बिल्ट इन कास्टिंग के लिए आलसी पंटिंग करने के बजाय पूरा रूपांतरण स्वयं करना चाहते हैं, तो आप इसके आसपास हो सकते हैं।

पाठक के लिए NULL हैंडलिंग को एक (आसान) अभ्यास के रूप में छोड़ दिया जाता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django बल्क_क्रेट उन पंक्तियों को अनदेखा करते हैं जो IntegrityError का कारण बनते हैं?

  2. पोस्टग्रेज में एक जेसन सरणी को पंक्तियों में कैसे बदलें

  3. PostgreSQL डेटाबेस में आर्किटेक्चर और मेमोरी की ट्यूनिंग

  4. अजवाइन कार्यकर्ता डेटाबेस कनेक्शन पूलिंग

  5. Psycopg2 बड़ी चुनिंदा क्वेरी पर मेमोरी का उपयोग करता है