Theory
घड़ी टिक-टिक कर रही है
अपने university library database की कल्पना कीजिए। आपको एक किताब देर से लौटाने वाले student के लिए बिल्कुल fine calculate करना है, तय करना है कि कौन से students बिल्कुल छह महीने में graduate होंगे, या एक raw timestamp को एक पढ़ने-लायक़ 'DD-MON-YYYY' report में format करना है। अगर आप dates को सरल strings या integers की तरह मानते हैं, आप leap years, बदलती month lengths, और time-of-day offsets का हिसाब रखने में विफल होंगे। एक database engine समय को इतनी बुद्धिमानी से कैसे manipulate करता है कि January 31 में 'एक महीना' जोड़ने का परिणाम एक invalid date के बजाय February 28 (या 29) आए?
Theory
घड़ी बनाम Calendar Sheet
SYSDATE को अपनी wristwatch की तरह सोचिए, अभी बिल्कुल समय दिखाते हुए। TRUNC और ROUND जैसे functions उस watch को adjust करने जैसे हैं: TRUNC watch को दिन की शुरुआत पर 'lock' करने जैसा है (hours/minutes को नज़रअंदाज़ करते हुए), जबकि ROUND सुई को नज़दीकी घंटे या महीने पर धकेलने जैसा है। Date functions आपको समय manipulate करने की शक्ति देते हैं, इसे आगे, पीछे खिसकाते हुए, या seconds और milliseconds की ग़ैर-ज़रूरी precision काटते हुए।
Theory
ज़रूरी Date Function शस्त्रागार
Oracle SQL में, date manipulation एक standard internal 7-byte representation पर बनी है। function library पर महारत आपको अंतर्निहित calendar जटिलता की चिंता किए बिना जटिल arithmetic करने देती है।
At a glance
Table 1: BCA laboratory assignments के लिए आम Oracle Date Functions।
| Function | Purpose | Usage Example |
|---|---|---|
| SYSDATE | मौजूदा system date और time return करता है। | SELECT SYSDATE FROM DUAL; |
| SYSTIMESTAMP | मौजूदा date, time, और fractional seconds/time zone return करता है। | SELECT SYSTIMESTAMP FROM DUAL; |
| ADD_MONTHS(d, n) | date d में n महीने जोड़ता है। | ADD_MONTHS(SYSDATE, 1) |
| MONTHS_BETWEEN(d1, d2) | दो dates के बीच महीने return करता है। | MONTHS_BETWEEN(d1, d2) |
| TRUNC(d, fmt) | date को unit की शुरुआत तक काटता है। | TRUNC(SYSDATE, 'MM') |
| NEXT_DAY(d, day) | अगला निर्दिष्ट weekday खोजता है। | NEXT_DAY(SYSDATE, 'FRIDAY') |
Theory
Worked Example: Overdue Fine Calculator
आइए calculate करें कि एक student ने अपनी library book return date कितने दिन पार की, और तय करें उनकी नई deadline अगर हम उन्हें एक-महीने का extension देते हैं।
Practical
Library Deadline Logic
-- Assume book_due_date is a column in our 'loans' table
-- 1. Calculate how many months past due
SELECT
student_id,
TRUNC(MONTHS_BETWEEN(SYSDATE, book_due_date)) AS months_late,
ADD_MONTHS(book_due_date, 1) AS extended_deadline
FROM loans
WHERE SYSDATE > book_due_date;Think first
ROUND बनाम TRUNC जाल
अगर आज July 15th, 2026 है, TRUNC(SYSDATE, 'MM') और ROUND(SYSDATE, 'MM') का परिणाम क्या होगा?
Show the answer
दोनों July 1st, 2026 return करेंगे, और यही इस ट्रैप का असली point है। TRUNC(SYSDATE, 'MM') हमेशा महीने की शुरुआत तक पीछे काटता है, तो यह July 1st देता है। ROUND(SYSDATE, 'MM') सबसे नज़दीकी महीने की सीमा तक round करता है, और Oracle महीने की 16th तारीख़ से ही ऊपर round करता है। क्योंकि 15th उस cutoff से ठीक पहले पड़ती है, ROUND भी July 1st पर ही आता है। अगर तारीख़ July 16th होती, तो ROUND आगे बढ़कर August 1st पर जाता जबकि TRUNC July 1st पर ही रहता।
Quiz
कौन सा function ख़ास तौर पर एक दी गई date से पूरे महीने जोड़ने या घटाने के लिए design किया गया है जबकि अलग month lengths और leap years अपने-आप सँभालता है?
- SYSDATE + 30
- ADD_MONTHS
- MONTHS_BETWEEN
- TO_DATE_ADD
Show the answer
ADD_MONTHS
ADD_MONTHS एकमात्र function है जो महीनों की बदलती lengths और leap years को सही ढंग से सँभालता है। '+ 30' जैसा सरल arithmetic बस 30 दिन जोड़ता है, जो आपको महीने के इच्छित दिन से अलग एक दिन पर उतार सकता है।
Quiz
SYSDATE और SYSTIMESTAMP के बीच मुख्य अंतर क्या है?
- SYSDATE time zone info शामिल करता है, SYSTIMESTAMP नहीं।
- SYSDATE केवल dates के लिए है; SYSTIMESTAMP fractional seconds और time zone info शामिल करता है।
- वे Oracle में समान हैं।
- SYSTIMESTAMP केवल Oracle के पुराने versions के लिए है।
Show the answer
SYSDATE केवल dates के लिए है; SYSTIMESTAMP fractional seconds और time zone info शामिल करता है।
SYSTIMESTAMP बहुत ज़्यादा precision देता है, fractional seconds और time zone offsets पकड़ते हुए, जो transaction logging और performance auditing के लिए अहम है।
Watch out
Classic जाल: Date Format Strings
TO_CHAR(date, 'format') इस्तेमाल करते समय, याद रखिए कि 'mm' महीनों के लिए है और 'mi' minutes के लिए! semester exams में एक आम error TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MM:SS') लिखना है, यह minute position में month code दोहराने में परिणत होगा। minutes के लिए हमेशा 'MI' इस्तेमाल कीजिए!
Theory
Date Functions को Semester 3 से जोड़ना
date arithmetic समझना Semester 3 के Business Intelligence modules की बुनियाद है। आप आख़िरकार इन्हीं functions का इस्तेमाल 'Year-over-Year' या 'Quarter-to-Date' analytical reports बनाने के लिए करेंगे, जहाँ date boundaries manipulate करना एक रोज़मर्रा की ज़रूरत है।
Summary
Key takeaways
- SYSDATE मौजूदा server date/time देता है; SYSTIMESTAMP precision और time zone data जोड़ता है।
- TRUNC एक date को निर्दिष्ट unit की शुरुआत तक lock करता है (जैसे month, year)।
- ROUND एक date को नज़दीकी unit boundary तक ले जाता है (ऊपर या नीचे)।
- ADD_MONTHS month-based date arithmetic करने का सबसे सुरक्षित तरीक़ा है।
- 'MM' (month) टकराव से बचने के लिए formatting में minutes के लिए हमेशा 'MI' इस्तेमाल कीजिए।
- Memory Hook: ADD_MONTHS आपके लिए calendar math सँभालता है, अगर बच सकें तो कभी हाथ से numbers मत जोड़िए!