Đã xảy ra sự cố khi cố gắng chuyển đổi kiểu dữ liệu cột trong pgAdmin từ varchar thành số nguyên (trạng thái SQL: 22P02)

Aug 16 2020

Tôi chỉ đang cố gắng chuyển đổi một cột có character varyingkiểu dữ liệu thành integerbằng cách chạy đoạn mã Postgres này:

ALTER TABLE tbl.test ALTER COLUMN "XX" TYPE integer USING ("XX"::integer);

và tôi gặp lỗi này:

LỖI: cú pháp nhập không hợp lệ cho số nguyên: "XX" Trạng thái SQL: 22P02

Ai đó có thể giúp tôi giải quyết vấn đề này, xin vui lòng?

Trả lời

3 MikeOrganek Aug 16 2020 at 12:21

Dựa trên lỗi bạn nhận được, có vẻ như bạn có một số giá trị XXkhông thể chuyển đổi thành integer. Bạn sẽ cần phải sửa những giá trị đó trước khi phát hành alter table.

Tìm các giá trị không chính xác của bạn với truy vấn này:

select "XX" from tbl.test where "XX" !~ '^-{0,1}\d+$';

Đây !~NOTtrận đấu regex. Regex cố định ở đầu giá trị bằng ^, chiếm một dấu trừ tùy chọn với -{0,1}, phù hợp với 0 hoặc một ký tự gạch nối, sau đó đảm bảo rằng các ký tự còn lại ở cuối giá trị đều là chữ số với \d+$.

Bất kỳ giá trị XXnào không khớp với mẫu này sẽ được truy xuất và bạn có thể tìm ra cách xử lý chúng bằng cách cập nhật bảng hoặc sửa đổi usingphần của bạn alter table.