[SQL SERVER] Invalid character value for cast specification

วันนี้ผมแก้ App เก่าๆของที่บริษัทแล้วเกิดเจอปัญหา Invalid character value for cast specification ตอนนั้นไล่ข้อมูลแทบตาย เจอมหามหา Function Call และไปพบว่ามันผิดที่วันที่ (Date) ที่มีการจัด Format ผิด โดยไอ้เจ้าปัญหา

Invalid character value for cast specification 

มันมีความหมายว่าข้อมูลทางเราเป็น input ส่งให้ Database แล้วตัว DBMS เองไม่สามารถแปลงข้อมูลนั้น และเก็บลงฐานข้อมูลได้ ซึ่งสาเหคุอาจจะเกิดจากหลายๆสาเหตุ เช่น ข้อมูลประเภท Date ที่ Format ผิด หรือข้อมูลประเภท String เป็นต้น โดยในที่นี้ผมขอยกปัญหาที่ผมเจอก็คือ กรณีที่ข้อมูลนั้นเป็นพวก Date นะครับ

ตัวอย่างที่ผมเจอข้อมูลเกี่ยวกับพวกวันที่ Date พา Death เลยแหละ

  • ข้อมูลที่ส่งไปเก็บลง DB: 07/31/2014
  • ข้อมูลที่ควรจะเก็บใน DB: 2014-07-31

ปัญหา คือ ข้อมูลวันที่ที่เราส่งไป SQL Server ไม่รองรับ Format ข้อมูลแบบนี้ แต่รองรับข้อมูลรูปแบบ ดังนี้

  • แบบที่ 1: yyyy-MM-ddT00:00:00
  • แบบที่ 2: yyyy-MM-dd 00:00:00

ทางแก้ไข คือ พยายามจัดข้อมูลรูปแบบของข้อมูลในอยู่ในรูปแบบที่ SQL Server นั้นรองรับ ซึ่งก็คือ สองแบบข้างต้นนี้เอง ดังนั้นข้อมูลที่เราส่งไปเก็บมีรูปแบบจาก 07/31/2014 ไปเป็น 2014-07-31

หมายเหตุ วิธีการแบบนี้สามารถส่งข้อมูลปีที่เป็น ค.ศ. และ พ.ศ. ได้เลย โดยระบบจะปรับแก้วันที่ตาม Regional Setting ได้เองอัตโนมัติ แต่ต้องส่งข้อมูลชนิด Date เข้าไปเท่านั้น ห้ามส่งเป็น String เข้าไปเด็ดขาด(บางครังมีคนหัวหมอไปจัด String แล้วค่อยเอาไปเก็บ) เพราะระบบไม่มีการแก้ข้อมูลตาม Regional Setting ซึ่งส่งผลให้ App ของเราทำงานผิดภายในหลังได้

 


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.