Đã 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)
Tôi chỉ đang cố gắng chuyển đổi một cột có character varying
kiểu dữ liệu thành integer
bằ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
Dựa trên lỗi bạn nhận được, có vẻ như bạn có một số giá trị XX
khô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 !~
là NOT
trậ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ị XX
nà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 using
phần của bạn alter table
.