Theory
ઘડિયાળ ટકટક કરે છે
તમારા university ની library નું database કલ્પો. તમારે મોડું પુસ્તક પાછું આપનાર એક student માટે બિલકુલ દંડ ગણવો છે, નક્કી કરવું છે કે કયા students બિલકુલ છ મહિનામાં graduate થશે, કે એક raw timestamp ને વાંચી શકાય એવા 'DD-MON-YYYY' ના report માં format કરવું છે. જો તમે dates ને સાદી strings કે integers જેવી ગણો, તો તમે leap years, મહિનાની બદલાતી લંબાઈ, અને દિવસના સમયના તફાવતોનો હિસાબ રાખવામાં નિષ્ફળ જશો. તો એક database engine સમયને એટલી સમજદારીથી કેવી રીતે બદલે છે કે 31 January માં 'એક મહિનો' ઉમેરવાથી એક અમાન્ય તારીખને બદલે 28 February (કે 29મી) મળે?
Theory
ઘડિયાળ સામે Calendar નું પાનું
SYSDATE ને તમારી કાંડા ઘડિયાળ જેવો વિચારો, જે અત્યારનો બિલકુલ સમય દેખાડે છે. TRUNC અને ROUND જેવાં functions એ ઘડિયાળ ગોઠવવા જેવાં છે: TRUNC એટલે ઘડિયાળને દિવસની શરૂઆતે 'તાળું' મારવું (કલાક/મિનિટ અવગણતાં), જ્યારે ROUND એટલે કાંટાને સૌથી નજીકના કલાક કે મહિના તરફ ધકેલવો. Date functions તમને સમય બદલવાની શક્તિ આપે છે, એને આગળ ખસેડવાની, પાછળ ખસેડવાની, કે સેકન્ડ અને મિલિસેકન્ડની બિનજરૂરી ચોકસાઈ કાપી નાખવાની.
Theory
આવશ્યક Date Function નો ભંડાર
Oracle SQL માં, date ના ફેરફારો એક standard આંતરિક 7-byte રજૂઆત પર બંધાયેલા છે. Function ના પુસ્તકાલય પર પ્રભુત્વ મેળવવાથી તમે નીચેની calendar ની જટિલતાની ચિંતા કર્યા વગર જટિલ અંકગણિત કરી શકો છો.
At a glance
Table 1: BCA laboratory assignments માટે સામાન્ય Oracle Date Functions.
| Function | હેતુ | ઉપયોગનું ઉદાહરણ |
|---|---|---|
| SYSDATE | હાલની system ની તારીખ અને સમય પાછાં આપે છે. | SELECT SYSDATE FROM DUAL; |
| SYSTIMESTAMP | હાલની તારીખ, સમય, અને અપૂર્ણાંક સેકન્ડ/time zone પાછાં આપે છે. | SELECT SYSTIMESTAMP FROM DUAL; |
| ADD_MONTHS(d, n) | તારીખ d માં n મહિના ઉમેરે છે. | ADD_MONTHS(SYSDATE, 1) |
| MONTHS_BETWEEN(d1, d2) | બે તારીખો વચ્ચેના મહિના પાછા આપે છે. | MONTHS_BETWEEN(d1, d2) |
| TRUNC(d, fmt) | તારીખને એકમની શરૂઆત સુધી કાપે છે. | TRUNC(SYSDATE, 'MM') |
| NEXT_DAY(d, day) | આગળનો નિર્દિષ્ટ વાર શોધે છે. | NEXT_DAY(SYSDATE, 'FRIDAY') |
Theory
Worked Example: મોડા દંડનું Calculator
ચાલો ગણીએ કે એક student એ પોતાના library ના પુસ્તકની પાછા આપવાની તારીખ કેટલા દિવસ વટાવી છે, અને જો આપણે એમને એક મહિનાનું વધારાનું આપીએ તો એમની નવી છેલ્લી તારીખ નક્કી કરીએ.
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 નો ફાંદો
જો આજે 15 July, 2026 હોય, તો TRUNC(SYSDATE, 'MM') અને ROUND(SYSDATE, 'MM') નું પરિણામ શું આવશે?
Show the answer
બંને 1 July, 2026 પાછું આપે છે, અને આ ફાંદાનો બિલકુલ એ જ મુદ્દો છે. TRUNC(SYSDATE, 'MM') હંમેશા મહિનાની શરૂઆત સુધી પાછું કાપે છે, તો એ 1 July આપે છે. ROUND(SYSDATE, 'MM') સૌથી નજીકની મહિનાની સીમા સુધી round કરે છે, અને Oracle માત્ર મહિનાની 16મી તારીખથી જ ઉપર round કરે છે. કારણ કે 15મી એ cutoff ની બરાબર પહેલાં આવે છે, ROUND પણ 1 July પર જ ઊતરે છે. જો તારીખ 16 July હોત, તો ROUND આગળ કૂદીને 1 August પર જાત જ્યારે TRUNC 1 July પર જ રહેત.
Quiz
કયું function ખાસ કરીને એક આપેલી તારીખમાંથી આખા મહિના ઉમેરવા કે બાદ કરવા રચાયેલું છે અને સાથે મહિનાની જુદી લંબાઈ અને leap years આપોઆપ સંભાળે છે?
- SYSDATE + 30
- ADD_MONTHS
- MONTHS_BETWEEN
- TO_DATE_ADD
Show the answer
ADD_MONTHS
ADD_MONTHS એકમાત્ર એવું function છે જે મહિનાની બદલાતી લંબાઈ અને leap years સાચી રીતે સંભાળે છે. '+ 30' જેવું સાદું અંકગણિત ખાલી 30 દિવસ ઉમેરે છે, જે તમને ધાર્યા કરતાં મહિનાના જુદા દિવસે ઉતારી શકે.
Quiz
SYSDATE અને SYSTIMESTAMP વચ્ચેનો મુખ્ય ભેદ શું છે?
- SYSDATE માં time zone ની માહિતી હોય છે, SYSTIMESTAMP માં નહીં.
- SYSDATE માત્ર તારીખો માટે છે; SYSTIMESTAMP માં અપૂર્ણાંક સેકન્ડ અને time zone ની માહિતી હોય છે.
- Oracle માં એ બંને એકસરખાં છે.
- SYSTIMESTAMP માત્ર Oracle નાં જૂનાં versions માટે છે.
Show the answer
SYSDATE માત્ર તારીખો માટે છે; SYSTIMESTAMP માં અપૂર્ણાંક સેકન્ડ અને time zone ની માહિતી હોય છે.
SYSTIMESTAMP ઘણી ઊંચી ચોકસાઈ આપે છે, અપૂર્ણાંક સેકન્ડ અને time zone ના તફાવત પકડતાં, જે transaction ના logging અને performance ના auditing માટે નિર્ણાયક છે.
Watch out
Classic ફાંદો: Date Format ની Strings
TO_CHAR(date, 'format') વાપરતી વખતે, યાદ રાખો કે 'mm' મહિનાઓ માટે છે અને 'mi' મિનિટો માટે છે! Semester ની પરીક્ષાઓમાં એક સામાન્ય ભૂલ છે TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MM:SS') લખવું, આનાથી મિનિટની જગ્યાએ મહિનાનો code દોહરાવાશે. મિનિટો માટે હંમેશા 'MI' વાપરો!
Theory
Date Functions ને Semester 3 સાથે જોડવા
Date નું અંકગણિત સમજવું એ Semester 3 ના Business Intelligence ના modules નો પાયો છે. તમે આખરે આ જ functions વાપરીને 'Year-over-Year' કે 'Quarter-to-Date' ના વિશ્લેષણાત્મક reports બનાવશો, જ્યાં તારીખની સીમાઓ બદલવી એ રોજિંદી જરૂરિયાત છે.
Summary
Key takeaways
- SYSDATE હાલની server ની તારીખ/સમય આપે છે; SYSTIMESTAMP ચોકસાઈ અને time zone નો data ઉમેરે છે.
- TRUNC એક તારીખને નિર્દિષ્ટ એકમની શરૂઆતે જકડી દે છે (દા.ત. મહિનો, વર્ષ).
- ROUND એક તારીખને સૌથી નજીકની એકમની સીમા પર ખસેડે છે (ઉપર કે નીચે).
- ADD_MONTHS મહિના-આધારિત તારીખનું અંકગણિત કરવાનો સૌથી સલામત રસ્તો છે.
- 'MM' (મહિનો) સાથેનો ટકરાવ ટાળવા formatting માં મિનિટો માટે હંમેશા 'MI' વાપરો.
- Memory Hook: ADD_MONTHS તમારા માટે calendar નું ગણિત સંભાળે છે, જો ટાળી શકાય તો ક્યારેય હાથે આંકડા ન ઉમેરો!