มีปัญหาในการพยายามแปลงชนิดข้อมูลคอลัมน์ใน pgAdmin จาก varchar เป็นจำนวนเต็ม (สถานะ SQL: 22P02)
ฉันแค่พยายามแปลงคอลัมน์ที่มีcharacter varying
ประเภทข้อมูลinteger
โดยเรียกใช้สคริปต์ Postgres นี้:
ALTER TABLE tbl.test ALTER COLUMN "XX" TYPE integer USING ("XX"::integer);
และฉันได้รับข้อผิดพลาดนี้:
ข้อผิดพลาด: ไวยากรณ์การป้อนข้อมูลไม่ถูกต้องสำหรับจำนวนเต็ม: "XX" สถานะ SQL: 22P02
มีใครช่วยฉันแก้ไขปัญหานี้ได้ไหม
คำตอบ
จากข้อผิดพลาดที่คุณได้รับดูเหมือนว่าคุณมีค่าบางอย่างXX
ที่ไม่สามารถแปลงเป็นinteger
ไฟล์. คุณจะต้องแก้ไขค่าเหล่านั้นก่อนที่จะออกไฟล์alter table
.
ค้นหาค่าที่ไม่ถูกต้องของคุณด้วยแบบสอบถามนี้:
select "XX" from tbl.test where "XX" !~ '^-{0,1}\d+$';
นี่!~
คือการNOT
จับคู่ regex เบรก regex ที่จุดเริ่มต้นของมูลค่าที่มี^
บัญชีสำหรับเครื่องหมายลบกับตัวเลือกที่ตรงกับตัวอักษรที่ศูนย์หรือหนึ่งยัติภังค์แล้วมั่นใจได้ว่าตัวอักษรที่เหลือไปยังจุดสิ้นสุดของค่าที่เป็นตัวเลขทั้งหมดที่มี-{0,1}
\d+$
ค่าใด ๆXX
ที่ไม่ตรงกับรูปแบบนี้จะถูกเรียกคืนและคุณสามารถหาวิธีจัดการกับค่าเหล่านั้นได้โดยการอัปเดตตารางหรือแก้ไขusing
ส่วนของalter table
ไฟล์.