PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL:Có hàm nào sẽ chuyển đổi int cơ sở 10 thành chuỗi cơ sở 36 không?

Có các hàm base-64 (chẳng hạn như encode ) nhưng không có gì đối với cơ số-36. Tuy nhiên, bạn có thể viết một trong số của riêng mình hoặc sử dụng cái này :

CREATE OR REPLACE FUNCTION base36_encode(IN digits bigint, IN min_width int = 0) RETURNS varchar AS $$
DECLARE
    chars char[]; 
    ret varchar; 
    val bigint; 
BEGIN
    chars := ARRAY['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
    val := digits; 
    ret := ''; 
    IF val < 0 THEN 
        val := val * -1; 
    END IF; 
    WHILE val != 0 LOOP 
        ret := chars[(val % 36)+1] || ret; 
        val := val / 36; 
    END LOOP;

    IF min_width > 0 AND char_length(ret) < min_width THEN 
        ret := lpad(ret, min_width, '0'); 
    END IF;

    RETURN ret;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

Tuy nhiên, tôi nghĩ bạn nên tự hỏi mình xem cơ sở dữ liệu có phải là nơi thích hợp để xử lý loại định dạng dữ liệu này hay không, các vấn đề trình bày như thế này có thể được xử lý tốt hơn ở gần mức xem cuối cùng của ngăn xếp của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khách hàng MQTT đăng ký các Thay đổi của PostgreSQL DB

  2. không thể thực hiện các truy vấn RDS trên heroku

  3. Làm thế nào để xóa các chuỗi không sử dụng?

  4. Làm cách nào để nối ngoài hai bảng (bảng chính và nhiều-một) để chỉ nhận được MỘT mục từ bảng thứ hai?

  5. Có thể đặt tên cho các cột kết quả SQL từ các hàng trong bảng khác không? (Postgres)