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

PostgreSQL:एक बहुत बड़ी संख्या के हेक्स स्ट्रिंग को एक NUMERIC . में बदलें

यह एक तरह का क्रूर बल है और बिल्कुल भी बुलेटप्रूफ नहीं है:

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

मुझे नहीं लगता कि गैर-पर्ल एक नकारात्मक संख्याओं के साथ काम करता है, और मुझे पूरा यकीन है कि यदि आप गैर-हेक्स मान डालते हैं तो दोनों आपको खराब परिणाम देंगे, लेकिन वे आसानी से जाल और संभालने के लिए पर्याप्त परिदृश्य होंगे, निर्भर करता है आप फ़ंक्शन को क्या करना चाहते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgmemcache सेटअप और उपयोग

  2. मैं एक पोस्टग्रेस संग्रहीत प्रक्रिया कैसे लिखूं जो कुछ भी वापस नहीं करता है?

  3. जब किसी आइटम को ड्रॉपडाउन सूची से चुना जाता है तो फॉर्म फ़ील्ड को ऑटो पॉप्युलेट करने के लिए PHP\HTML स्क्रिप्ट

  4. Psycopg2 को छोटे अक्षर से शुरू होने वाले टेबल नाम पसंद नहीं हैं

  5. क्या PostgreSQL के पास Oracle में LEVEL जैसा छद्म-स्तंभ है?