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

เนื่องจากฟังก์ชันที่จะนำเสนอให้ชมยังมีอีกหลายฟังก์ชัน ทำให้บทความยาวเกินไป ก็ขอยกยอดไว้บทความหน้าแล้วกันครับ

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *