Site icon PlusMagi's Blog By Pitt Phunsanit

SQL Server: Convert date

คราวนี้เรามดูการเปลี่ยน date เป็น “การนำข้อมูลออก” (Output/Display) กันบ้าง เพราะบ่อยครั้งที่ข้อมูลในฐานะข้อมูลเก็บถูกต้องแล้ว แต่เวลา Select ออกมาโชว์หน้าเว็บหรือ Report กลับได้รูปแบบที่ไม่ต้องการ เช่น อยากได้ 31/01/2020 แต่ได้ 2020-01-31 00:00:00.000 ผู้ใช้บางส่วนจะอ่านข้อมูลได้ยาก หรือว่ามีข้อมูลเกินจำเป็น โดยที่คนส่วนใหญ่จะแยกเวลาหลังนาทีไม่ได้ การใช้ convert หรือ format จะเป็นการที่ทำให้ยูเซอร์ใช้งานง่ายขึ้น


คู่มือการใช้ CONVERT ใน SQL Server: เปลี่ยนวันที่ให้แสดงผลได้ดั่งใจ

สิ่งหนึ่งที่ Developer มือใหม่มักเข้าใจผิดคือ “คิดว่าวันที่ใน Database มีรูปแบบ (Format)” ความเป็นจริงคือ SQL Server เก็บวันที่เป็นตัวเลข (Binary) มันไม่มีหน้าตาครับ แต่ที่เราเห็นเป็น YYYY-MM-DD ตอนกด Select นั่นคือโปรแกรมมันแสดงผล Default ให้เราดู ถ้าเราอยากเปลี่ยนหน้าตาของวันที่เพื่อนำไปแสดงผลใน Report หรือ Application เราต้องใช้คำสั่ง CONVERT ครับ
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )


รหัส Style ยอดนิยมที่ต้องจำ (Cheat Sheet)

แม้จะมีรหัสมากมาย แต่ในการทำงานจริง เราใช้กันอยู่ไม่กี่ตัวครับ โดยแบ่งเป็นกลุ่มหลักๆ ดังนี้ (ผมแนะนำให้ใช้กลุ่มที่ +100 เสมอ เพื่อให้ปีเป็น ค.ศ. 4 หลัก YYYY ครับ)

รหัส Styleรูปแบบ (Format)ตัวอย่างผลลัพธ์การใช้งาน
103dd/mm/yyyy31/01/2020นิยมที่สุดในไทย/UK
101mm/dd/yyyy01/31/2020รูปแบบ US
120yyyy-mm-dd hh:mi:ss2020-01-31 14:30:00มาตรฐาน ODBC / สากล
112yyyymmdd20200131ใช้ทำ ID หรือ Sorting

Note: หากใช้รหัสเลขหลักเดียว (เช่น 3, 1, 20) ปีจะแสดงแค่ 2 หลัก (YY) ซึ่งไม่แนะนำให้ใช้ในปัจจุบันครับ


ตัวอย่างการใช้งานจริง

  1. แปลงเป็นแบบไทยๆ (วัน/เดือน/ปี)
    SELECT CONVERT(VARCHAR, GETDATE(), 103);
    — ผลลัพธ์: 31/01/2020
  2. ตัดเอาแค่เวลา (Time Only)
    SELECT CONVERT(VARCHAR(5), GETDATE(), 108);
    — ผลลัพธ์: 14:30 (กำหนด length เป็น 5 เพื่อตัดวินาทีทิ้ง)
  3. สร้าง Running Number จากวันที่
    SELECT CONVERT(VARCHAR, GETDATE(), 112) + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), ':', '');
    — ผลลัพธ์: 20200131143000 (ปีเดือนวันชั่วโมงนาทีวินาที)

ข้อควรระวังระดับ Pro (Performance Tips)


สรุป


อ่านเพิ่มเติม

Exit mobile version