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 हैंडलिंग को एक (आसान) अभ्यास के रूप में छोड़ दिया जाता है।