มีปัญหาในการพยายามแปลงชนิดข้อมูลคอลัมน์ใน pgAdmin จาก varchar เป็นจำนวนเต็ม (สถานะ SQL: 22P02)

Aug 16 2020

ฉันแค่พยายามแปลงคอลัมน์ที่มีcharacter varyingประเภทข้อมูลintegerโดยเรียกใช้สคริปต์ Postgres นี้:

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

และฉันได้รับข้อผิดพลาดนี้:

ข้อผิดพลาด: ไวยากรณ์การป้อนข้อมูลไม่ถูกต้องสำหรับจำนวนเต็ม: "XX" สถานะ SQL: 22P02

มีใครช่วยฉันแก้ไขปัญหานี้ได้ไหม

คำตอบ

3 MikeOrganek Aug 16 2020 at 12:21

จากข้อผิดพลาดที่คุณได้รับดูเหมือนว่าคุณมีค่าบางอย่างXXที่ไม่สามารถแปลงเป็นintegerไฟล์. คุณจะต้องแก้ไขค่าเหล่านั้นก่อนที่จะออกไฟล์alter table.

ค้นหาค่าที่ไม่ถูกต้องของคุณด้วยแบบสอบถามนี้:

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

นี่!~คือการNOTจับคู่ regex เบรก regex ที่จุดเริ่มต้นของมูลค่าที่มี^บัญชีสำหรับเครื่องหมายลบกับตัวเลือกที่ตรงกับตัวอักษรที่ศูนย์หรือหนึ่งยัติภังค์แล้วมั่นใจได้ว่าตัวอักษรที่เหลือไปยังจุดสิ้นสุดของค่าที่เป็นตัวเลขทั้งหมดที่มี-{0,1}\d+$

ค่าใด ๆXXที่ไม่ตรงกับรูปแบบนี้จะถูกเรียกคืนและคุณสามารถหาวิธีจัดการกับค่าเหล่านั้นได้โดยการอัปเดตตารางหรือแก้ไขusingส่วนของalter tableไฟล์.