यह एक तरह का क्रूर बल है और बिल्कुल भी बुलेटप्रूफ नहीं है:
CREATE OR REPLACE FUNCTION hex_to_int(hexval varchar) RETURNS numeric AS $$
DECLARE
result NUMERIC;
i integer;
len integer;
hexchar varchar;
BEGIN
result := 0;
len := length(hexval);
for i in 1..len loop
hexchar := substr(hexval, len - i + 1, 1);
result := result + round(16 ^ (i - 1)::dec * case
when hexchar between '0' and '9' then cast (hexchar as int)
when upper (hexchar) between 'A' and 'F' then ascii(upper(hexchar)) - 55
end);
end loop;
RETURN result;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE STRICT;
select hex_to_int('12AE34F'); -- returns 19587919
या, यदि आपके पास पीएल/पर्ल स्थापित है, तो आप इसे भारी भारोत्तोलन करने दे सकते हैं:
CREATE OR REPLACE FUNCTION hex_to_int_perl(varchar)
RETURNS numeric AS
$BODY$
my ($hex) = @_;
return sprintf "%d", hex($hex);
$BODY$
LANGUAGE plperl VOLATILE
COST 100;
select hex_to_int_perl('12AE34F'); -- returns 19587919
मुझे नहीं लगता कि गैर-पर्ल एक नकारात्मक संख्याओं के साथ काम करता है, और मुझे पूरा यकीन है कि यदि आप गैर-हेक्स मान डालते हैं तो दोनों आपको खराब परिणाम देंगे, लेकिन वे आसानी से जाल और संभालने के लिए पर्याप्त परिदृश्य होंगे, निर्भर करता है आप फ़ंक्शन को क्या करना चाहते हैं।