Skip to content

2.2 Leading Zeros 🔥

นี่คือ bug ที่พบบ่อยที่สุดในงาน data — ทุกคนเจอ ไม่มียกเว้น คุณเปิดไฟล์ CSV ใน Sheets แล้วรหัสนักเรียน 00123 กลายเป็น 123 ทันที JOIN กับฐานข้อมูลเดิมไม่ได้ ข้อมูลกลายเป็นขยะ

สมมติฐานข้อมูลมีนักเรียน:

student_id (VARCHAR)name
00123Ploy
00456Som
00789Tong

ขั้นตอนที่ทำ bug:

  1. Export เป็น CSV → student_id ยังเป็น 00123
  2. เปิด CSV ใน Google Sheets → Sheets เห็น 00123 คิดว่าเป็น “ตัวเลข” → ตัด leading zeros123
  3. พยายาม JOIN กลับ → 123 ≠ 00123ไม่ match!

ทำไมมันเกิดขึ้น

Section titled “ทำไมมันเกิดขึ้น”

กฎง่ายๆ: ตัวเลข 123 กับ 00123 เป็นค่าเดียวกัน (หนึ่งร้อยยี่สิบสาม) แต่ text "123" กับ "00123" เป็น คนละค่า

เครื่องมือที่ “ช่วยเยอะ” (เช่น Sheets, Excel) จะพยายาม auto-detect type — ถ้ามันเห็นค่าที่หน้าตาเป็นตัวเลข มันจะแปลงให้ → leading zeros หาย

กฎทอง:

ทดลอง 1: เห็นปัญหา

Section titled “ทดลอง 1: เห็นปัญหา”
  1. เปิด Sheet ใหม่
  2. พิมพ์ 00123 ในเซลล์ A1 → Sheets เปลี่ยนเป็น 123 ทันที!
  3. ลอง =A1 → ได้ 123 (leading zeros หายแล้ว กู้คืนไม่ได้)

ทดลอง 2: วิธีป้องกัน

Section titled “ทดลอง 2: วิธีป้องกัน”

วิธี 1: ใส่ apostrophe นำหน้า

  1. พิมพ์ '00123 ในเซลล์ B1 → แสดงเป็น 00123 (text)
  2. =ISTEXT(B1) → TRUE
  3. =ISNUMBER(B1) → FALSE

วิธี 2: Format cell ก่อนพิมพ์

  1. เลือก column C → Format → Number → Plain text
  2. พิมพ์ 00123 ใน C1 → leading zeros อยู่ครบ!

วิธี 3: Import CSV อย่างปลอดภัย

  1. ไปที่ File → Import
  2. เลือก “Convert text to numbers, dates, and formulas”No
  3. ทุก column จะถูก import เป็น text → leading zeros อยู่ครบ

ทดลอง 3: เปรียบเทียบ

Section titled “ทดลอง 3: เปรียบเทียบ”
=A1=B1 → FALSE (123 ≠ "00123")
=A1=123 → TRUE (123 = 123)
=B1="00123" → TRUE ("00123" = "00123")

สรุปวิธีป้องกัน

Section titled “สรุปวิธีป้องกัน”
เครื่องมือวิธีป้องกัน
Google Sheetsใส่ ' นำหน้า หรือ format column เป็น “Plain text” ก่อน import
Cเก็บ ID เป็น char[] ไม่ใช่ int
Python (pandas)pd.read_csv(file, dtype={'id_col': str})
SQLใช้ VARCHAR ไม่ใช่ INTEGER สำหรับ ID columns