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

Tạo số nguyên lớn từ đầu lớn của uuid trong PostgreSQL

Nhanh chóng và không có SQL động

Truyền 16 chữ số hex đầu của UUID trong biểu diễn văn bản dưới dạng chuỗi bit bit(64) và truyền nó tới bigint . Xem:

Thuận tiện, các chữ số thập lục phân thừa ở bên phải bị cắt bớt trong quá trình truyền sang bit(64) tự động - chính xác những gì chúng tôi cần.

Postgres chấp nhận nhiều định dạng khác nhau cho đầu vào. Chuỗi ký tự đã cho của bạn là một trong số chúng:

14607158d3b14ac0b0d82a9a5a9e8f6e

Biểu diễn văn bản mặc định của UUID (và text đầu ra trong Postgres cho kiểu dữ liệu uuid ) thêm dấu gạch ngang vào những vị trí được xác định trước:

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

Hướng dẫn:

Nếu định dạng đầu vào có thể thay đổi, trước tiên hãy bỏ dấu gạch ngang để đảm bảo:

SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;

Truyền thực tế uuid nhập bằng uuid::text .

db <> fiddle tại đây

Lưu ý rằng Postgres sử dụng đã ký số nguyên, vì vậy bigint tràn sang số âm ở nửa trên - không liên quan cho mục đích này.

Thiết kế DB

Nếu có thể, hãy thêm bigserial vào bảng bên dưới và sử dụng cột đó thay thế.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép dữ liệu Bảng từ DB này sang DB khác

  2. Postgres:lọc kết quả bằng ARRAY_AGG và HAVING (thay vì WHERE)

  3. Làm cách nào để CẤP TẤT CẢ QUYỀN RIÊNG TƯ trên TẤT CẢ CÁC CHẾ ĐỘ XEM trong một tuyên bố?

  4. Làm cách nào để xuất dữ liệu kết quả trong PostgreSQL sang .CSV?

  5. Các lệnh meta trong Psycopg2 - \ d không hoạt động