Oracle Tips : Amazing Oracle Date Function Part#1
Oracle Tips : Amazing Oracle Date Function Part#1
สวัสดีตอนกลางคืนอีกแล้ว วันนี้มีทิปดีๆมาฝากเป็นเรื่องของวันเวลาครับ ไม่ว่าจะทำอะไรอยู่ที่ไหนเวลาอยู่เดินไปกับเราเสมอ ยิ่งพูดถึงเรื่องของ ฐานข้อมูล หรือ ข้อมูล ด้วยแล้ว เราคงหนีเรื่องการใช้ วัน.เวลา (date) ไม่ได้แน่นอน
ครับเรามาเริ่มกันเลยดีว่า วันนี้มีฟังก์ชันเกี่ยวกับเรื่องการจัดการเวลามาฝากหลายฟังก์ชัน (คัดที่ใช้ประโยชน์บ่อยๆเลย) ดังนี้
1. SYSDATE vs CURRENT_DATE
ฟังก์ชันแรกนี้คงจะคุ้นเคยกันกับ “SYSDATE” ซึ่งคือการแสดง วัน/เวลา ณ ปัจจุบัน ส่วน CURRENT_DATE ก็ให้ผลลัพธ์เช่นเดียวกันครับ แต่จะต่างกันตรงที่ CURRENT_DATE จะแสดงวัน/เวลาตาม TimeZone ของเซสชันนั้นๆ ดังตัวอย่าง
สมมติว่ากำหนด NLS_DATE_FORMAT = ‘dd-mon-yyyy hh24:mi’
SQL> alter session set NLS_DATE_FORMAT = ‘dd-mon-yyyy hh24:mi’ ;
SQL> select sessiontimezone, sysdate, current_date from dual; SESSIONTIMEZONE SYSDATE CURRENT_DATE ————————————— ————————— —————————— +07:00 18-jul-2009 00:38 18-jul-2009 00:38 |
จากตัวอย่างได้ผลลัพธ์เหมือนกัน แต่ถ้าเราเปลี่ยน TimeZone เป็น “-5” ล่ะจะได้ผลเปลี่ยนไปแบบไหน
SQL> alter session set time_zone=’-5:0′ ;
SQL> select sessiontimezone, sysdate, current_date from dual; SESSIONTIMEZONE SYSDATE CURRENT_DATE —————————— ————————— —————————– -05:00 18-jul-2009 00:43 17-jul-2009 12:43 |
ผลปรากฎว่าเวลาของ CURRENT_DATE ถอยหลังไปจาก SYSDATE 12 ชั่วโมงเลยครับ ( ปกติเราใช้ +7 แต่เปลี่ยนเป็น -5 ก็เลยห่างกัน 12 ชั่วโมง = -5..0..+7 ) เพราะฉะนั้นเวลาเลือกจะใช้ฟังก์ชันในการแสดงวันเวลา เราก็จะสามารถเลือกได้เหมาะสมขึ้นครับ
2. ADD_MONTHS Funtion
ฟังก์ชันนี้ใช้สำหรับการแสดงวันที่ในอีกกี่เดือนข้างหน้าหรือย้อนหลังได้ โดยมีรูปแบบการใช้ดังนี้
ADD_MONTHS( <date> , < integer of months> ) |
SQL> select add_months(sysdate,-1) LAST_MONTH, sysdate THIS_MONTH, add_months(sysdate,+1) NEXT_MONTH from dual; LAST_MONTH THIS_MONTH NEXT_MONTH —————— —————— —————– 18-jun-2009 00:50 18-jul-2009 00:50 18-aug-2009 00:50 |
จากตัวอย่างผมใช้ฟังก์ชัน ADD_MONTHS แสดงวันที่ย้อนหลัง 1 เดือน, วันที่ปัจจุบัน, วันที่อีก 1 เดือน นับจากวันนี้ได้
ใน Statement เดียวครับ
3. LAST_DAY Function
ฟังก์ชันนี้เราใช้สำหรับหาวันที่วันสุดท้ายของเดือนสะดวกรวดเร็วดี เพราะบางเดือนมี 30, 31 วันไม่ตรงกัน และแย่ยิ่งกว่านั้นคือเดือนกุมภาฯที่มี 28, 29 วันนั่นแหละครับ ฟังก์ชันนี้ช่วยได้ไม่ต้องคำนวนเอง มีรูปแบบดังนี้
LAST_DAY( <date> ) |
SQL> select last_day(sysdate) DATE_END_JUL, last_day(add_months(sysdate,+2)) DATE_END_SEP from dual; DATE_END_JUL DATE_END_SEP ———————— ———————— 31-jul-2009 01:05 30-sep-2009 01:05 |
เนื่องจากฟังก์ชันที่จะนำเสนอให้ชมยังมีอีกหลายฟังก์ชัน ทำให้บทความยาวเกินไป ก็ขอยกยอดไว้บทความหน้าแล้วกันครับ