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

आधार N में स्ट्रिंग प्रतिनिधित्व से मान को संख्यात्मक में बदलें

दुर्भाग्य से, PostgreSQL में इसके लिए कोई अंतर्निहित फ़ंक्शन नहीं है, लेकिन इसे काफी आसान लिखा जा सकता है:

CREATE OR REPLACE FUNCTION number_from_base(num TEXT, base INTEGER)
  RETURNS NUMERIC
  LANGUAGE sql
  IMMUTABLE
  STRICT
AS $function$
SELECT sum(exp * cn)
FROM (
  SELECT base::NUMERIC ^ (row_number() OVER () - 1) exp,
         CASE
           WHEN ch BETWEEN '0' AND '9' THEN ascii(ch) - ascii('0')
           WHEN ch BETWEEN 'a' AND 'z' THEN 10 + ascii(ch) - ascii('a')
         END cn
  FROM regexp_split_to_table(reverse(lower(num)), '') ch(ch)
) sub
$function$;

नोट :मैंने numeric . का प्रयोग किया है वापसी प्रकार के रूप में, int4 . के रूप में कई मामलों में (लंबी स्ट्रिंग इनपुट के साथ) पर्याप्त नहीं है।

संपादित करें :यहां एक नमूना रिवर्स फ़ंक्शन है, जो एक bigint . को रूपांतरित कर सकता है एक कस्टम आधार के भीतर इसके पाठ प्रतिनिधित्व के लिए:

CREATE OR REPLACE FUNCTION number_to_base(num BIGINT, base INTEGER)
  RETURNS TEXT
  LANGUAGE sql
  IMMUTABLE
  STRICT
AS $function$
WITH RECURSIVE n(i, n, r) AS (
    SELECT -1, num, 0
  UNION ALL
    SELECT i + 1, n / base, (n % base)::INT
    FROM n
    WHERE n > 0
)
SELECT string_agg(ch, '')
FROM (
  SELECT CASE
           WHEN r BETWEEN 0 AND 9 THEN r::TEXT
           WHEN r BETWEEN 10 AND 35 THEN chr(ascii('a') + r - 10)
           ELSE '%'
         END ch
  FROM n
  WHERE i >= 0
  ORDER BY i DESC
) ch
$function$;

उदाहरण उपयोग:

SELECT number_to_base(1248, 36);

-- +----------------+
-- | number_to_base |
-- +----------------+
-- | yo             |
-- +----------------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टैग_नाम और टैग_वैल्यू के साथ JSONb को XML में पोस्टग्रेज करता है

  2. पोस्टग्रेस्क्ल में सिद्धांत JSON कॉलम एक ही डेटा की वस्तुओं या सरणियों को संग्रहीत कर रहा है

  3. PostgreSQL - अलग-अलग समय क्षेत्र में दिनांक कैसे प्रस्तुत करें?

  4. पोस्टग्रेज में इस समूह ActiveRecord क्वेरी को कैसे करें

  5. हेरोकू - साझा पोस्टग्रेज डेटाबेस में एकल तालिका को डंप और लोड करें