หลาย ๆ คนคงเคยเจอปัญหาว่าฐานข้อมูลของเรากำหนด default การจัดเก็บข้อมูลวันที่ไว้เป็นปี ค.ศ. แต่ระบบที่เราพัฒนาต้องแสดงผลเป็นปี พ.ศ. เราต้องทำอย่างไร วันนี้จึงขอนำเสนอวิธีการแสดงผลวันที่เป็นภาษาที่เราต้องการด้วยฟังก์ชัน TO_CHAR กันค่ะ
โดยที่ฟังก์ชัน TO_CHAR ทำหน้าที่ในการแปลงข้อมูลตัวเลขและข้อมูลวันที่เป็นตัวอักษร ซึ่งมีรูปแบบ Syntax ดังนี้
TO_CHAR
(input_value
,[
format_mask
],[
nls_parameter
])
พารามิเตอร์ของฟังก์ชัน TO_CHAR คือ
- input_value (จำเป็น): ค่าของวันที่ที่ต้องการจะแปลงค่า
- format_mask (ทางเลือก): เป็นรูปแบบที่ต้องการให้แสดง หากไม่ได้ระบุไว้จะแสดงตามค่า default ที่กำหนดไว้
- nls_parameter (ทางเลือก): เป็น nls language ที่จะใช้ในการแปลงค่า
ต่อไปนี้เป็นตัวอย่าง format_mask ที่ใช้บ่อย ๆ โดยแต่ละ format_mask สามารถนำผสมรวมกันได้ เพื่อให้ได้ค่าการแสดงผลที่เราต้องการ
format_mask | คำอธิบาย |
YEAR | อ่านค่าปีเป็นตัวอักษร |
YYYY, YYY, YY, Y | แสดงจำนวนหลักสุดท้ายของปีตามที่ระบุ |
MM | แสดงเดือน (01-12, JAN = 01) |
MON | แสดงชื่อเดือนแบบย่อ |
MONTH | แสดงชื่อเดือนแบบเต็ม |
D | แสดงวันในสัปดาห์ |
DAY | แสดงชื่อของวัน |
DD | แสดงวันของเดือน (1-31) |
DDD | แสดงวันของปี (1-366) |
DY | แสดงชื่อย่อของวัน |
HH | แสดงชั่วโมงของวัน (1-12) |
HH12 | แสดงชั่วโมงของวัน (1-12) |
HH24 | แสดงชั่วโมงของวัน (0-23) |
MI | แสดงนาที (0-59) |
SS | แสดงวินาที (0-59) |
คราวนี้ลองมาเขียน query เพื่อดูตัวอย่างค่าของ format_mask แต่ละตัวกันว่าจะแสดงผลออกมาเป็นอย่างไร
จะเห็นว่าค่าวันที่ที่แสดง แสดงเป็นปี ค.ศ. ตาม default ของฐานข้อมูล สังเกตุว่าข้อมูลบาง format_mask จะมีค่าศูนย์นำหน้า และมีช่องว่างตามหลัง ดังนั้นถ้าต้องการตัดเลขศูนย์และช่องว่างเราสามารถใช้ “FM” นำหน้า format_mask ตามตัวอย่างต่อไปนี้
คราวนี้ถ้าเราต้องการที่จะให้การแสดงผลวันที่เป็นวัน เดือน ปี ไทย เราสามารถใช้ nls_parameter เข้ามาช่วยได้โดยสามารถกำหนดได้ตามตัวอย่างข้างล่างนี้
ตัวแปรที่สำคัญคือ
– NLS_CALENDAR ตัวนี้แหละที่ทำให้ พ.ศ. แสดงเป็น พุทธศักราช 2562 (THAI BUDDHA)
– NLS_DATE_LANGUAGE ตัวนี้กำหนดให้แสดงเดือนเป็นภาษาไทย (THAI)
ด้วยตัวพารามิเตอร์ NLS_CALENDAR และ NLS_DATE_LANGUAGE เราก็สามารถแสดงผลเป็น ภาษาอะไรก็ได้ตามที่เราต้องการ