ใน SQL Server ทั้ง CAST และ CONVERT มีหน้าที่หลักเหมือนกันคือ การแปลงชนิดของข้อมูล (Data Type) จากชนิดหนึ่งไปเป็นอีกชนิดหนึ่ง (เช่น แปลงตัวเลขเป็นข้อความ หรือแปลงวันที่เป็นข้อความ)
แต่ทั้งสองคำสั่งนี้มีจุดที่แตกต่างกันสำคัญ ๆ รวมถึงเรื่องอย่าง performance และ portability
| คุณสมบัติ | CAST | CONVERT |
|---|
| มาตรฐาน | เป็นมาตรฐาน ANSI SQL (ใช้ได้กับฐานข้อมูลอื่นด้วย) | เป็นคำสั่งเฉพาะของ SQL Server (T-SQL) |
| การจัดรูปแบบ (Formatting) | ทำไม่ได้ (แปลงแบบพื้นฐานเท่านั้น) | ทำได้ดีมาก (โดยเฉพาะกับ Date/Time) |
| ไวยากรณ์ (Syntax) | จำง่าย ตรงไปตรงมา | ซับซ้อนกว่าเล็กน้อย มี parameters เพิ่ม |
| ประสิทธิภาพ | ใกล้เคียงกันมาก | ใกล้เคียงกันมาก |
CAST (มาตรฐานสากล)
CAST เป็นคำสั่งที่เป็นมาตรฐาน ANSI หมายความว่าถ้าคุณเขียน Query นี้ แล้ววันหนึ่งต้องย้ายไปใช้ฐานข้อมูลอื่น (เช่น MySQL, PostgreSQL, Oracle) คุณมักจะใช้ไวยากรณ์เดิมได้โดยไม่ต้องแก้โค้ด
- Syntax:
CAST(expression AS data_type)
- จุดเด่น: อ่านง่าย เขียนสั้น เหมาะสำหรับการแปลงค่าธรรมดาที่ไม่ต้องการจัดรูปแบบพิเศษ
ตัวอย่าง:
— แปลงตัวเลข 123.45 เป็นจำนวนเต็ม (Integer)
SELECT CAST(123.45 AS INT);
— ผลลัพธ์: 123
CONVERT (เก่งเรื่อง Format)
CONVERT เป็นฟังก์ชันเฉพาะของ SQL Server มีความยืดหยุ่นสูงกว่า เพราะมี parameter ตัวที่ 3 ที่เรียกว่า Style ซึ่งช่วยกำหนดรูปแบบการแสดงผลได้ โดยเฉพาะเรื่อง วันที่ (Date)
- Syntax:
CONVERT(data_type, expression, [style])
- จุดเด่น: สามารถกำหนดหน้าตาของข้อมูลที่แปลงออกมาได้ (เช่น อยากได้วันที่แบบ dd/mm/yyyy หรือ mm-dd-yy)
ตัวอย่าง:
— แปลงวันที่ปัจจุบัน เป็นข้อความ โดยระบุ Style 103 (British/French standard)
SELECT CONVERT(VARCHAR, GETDATE(), 103);
— ผลลัพธ์: 08/01/2026 (รูปแบบ dd/mm/yyyy)
— ถ้าใช้ CAST จะเลือก Format ไม่ได้ (จะได้ค่า Default)
SELECT CAST(GETDATE() AS VARCHAR);
— ผลลัพธ์: Jan 8 2026 12:09AM
สรุป: ควรใช้อันไหนดี?
- ใช้
CAST เป็นหลัก:
- หากคุณแค่ต้องการแปลง Type ข้อมูลปกติ (เช่น int -> varchar) แนะนำให้ใช้ CAST เพราะเป็นมาตรฐานสากลและอ่านง่ายกว่า
- ถ้าอาจจะมีการเปลี่ยน database ควรใช้ เพราะมีความเป็นมาตราฐาน ง่ายต่อการเปลี่ยนแปลง (portability)
- ใช้
CONVERT เมื่อต้องการจัด Format: หากคุณต้องการแปลง วันที่ (Date/Time) ออกมาเป็นข้อความในรูปแบบที่ต้องการ (เช่น ต้องการแสดงผลใน Report เป็น วว/ดด/ปปปป) คุณจำเป็นต้องใช้ CONVERT
ข้อควรระวัง: ทั้งคู่จะ Error หากข้อมูลนั้นแปลงไม่ได้จริง (เช่น พยายามแปลงคำว่า “Hello” เป็นตัวเลข) หากต้องการป้องกัน Error แนะนำให้ลองศึกษา TRY_CAST หรือ TRY_CONVERT ซึ่งจะคืนค่าเป็น NULL แทน Error ครับ
อ่านเพิ่มเติม