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

PostgreSQL:chuyển đổi chuỗi hex của một số rất lớn thành SỐ

Đây là một loại vũ lực và hoàn toàn không chống đạn:

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

Hoặc, nếu bạn đã cài đặt PL / Perl, bạn có thể để nó thực hiện công việc nặng nhọc:

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

Tôi không nghĩ giá trị không phải Perl hoạt động với số âm và tôi khá chắc chắn rằng cả hai sẽ cho bạn kết quả xấu nếu bạn đặt giá trị không phải là hex, nhưng đó sẽ là những tình huống đủ dễ để mắc bẫy và xử lý, tùy thuộc vào về những gì bạn muốn hàm thực hiệ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. Cách quản lý các giao dịch trên nhiều cơ sở dữ liệu

  2. pg_config, ruby ​​pg, postgresql 9.0 sự cố sau khi nâng cấp, centos 5

  3. Làm cách nào để truyền một bản ghi làm tham số cho hàm PL / pgSQL?

  4. Sử dụng bảng tạm thời để thay thế mệnh đề WHERE IN

  5. PHP Postgres:Lấy ID Chèn Cuối cùng