முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 6 · பாடம் 2 இன் 4பாடத்திட்டத்தில் 22/57~12 min
தொகுதி பாடங்கள் (2/4)

தேதி மற்றும் நேரமுத்திரை செயல்பாடுகள்

தேதிகள் மற்றும் நேர முத்திரைகள் எல்லா இடங்களிலும் உள்ளன: ஆர்டர்கள், உள்நுழைவுகள், நிகழ்வுகள், பில்லிங். இல் இந்தப் பாடத்தில் ஒரு தேதியிலிருந்து (ஆண்டு, மாதம்...) பகுதிகளை எவ்வாறு பிரித்தெடுப்பது என்று பார்ப்போம். ** துண்டிக்கவும் ஒரு சிறுமணிக்கு (மாதம், வாரம்…), **இடைவெளிகளைக் கணக்கிடுங்கள்** மற்றும் வேறுபாடுகள், மற்றும் காலம் முழுவதும் ஒப்பீடுகள்.

அடிப்படை வகைகள்

PostgreSQL வேறுபடுத்துகிறது:

  • DATE — தேதி மட்டும், வடிவம் YYYY-MM-DD;
  • TIMESTAMP — தேதி + நேரம், நேர மண்டலம் இல்லை;
  • TIMESTAMPTZ — தேதி + நேரம் + நேர மண்டலம்;
  • INTERVAL — ஒரு காலம் (எ.கா. '3 days', '2 hours 30 minutes').

எங்கள் ecommerce தரவுத்தொகுப்பில்:

நெடுவரிசைவகை
customers.signed_up_onDATE
orders.ordered_atTIMESTAMP
orders.shipped_atTIMESTAMP (NULL ஆக இருக்கலாம்)

EXTRACT - ஒரு பகுதியைப் படித்தல்

EXTRACT(part FROM date) எண்ணைப் பிரித்தெடுக்கிறது:

SQL
SELECT EXTRACT(YEAR  FROM ordered_at) AS year,
       EXTRACT(MONTH FROM ordered_at) AS month,
       EXTRACT(DOW   FROM ordered_at) AS day_of_week  -- 0=domenica
FROM   orders;

அதிகம் பயன்படுத்தப்படும் பாகங்கள்: YEAR, MONTH, DAY, HOUR, MINUTE, DOW (நாள் வாரம் 0-6), DOY (ஆண்டின் நாள்).

DATE_TRUNC — ரவுண்டிங் டவுன்

DATE_TRUNC('part', date) தேதியை கிரானுலாரிட்டியாக "துண்டிக்கிறது". அது அத்தியாவசியம் மாதம், வாரம், மணிநேரம் என தொகுக்க:

SQL
-- Tutti gli ordini fatti in "marzo 2025" cadono nello stesso bucket:
SELECT DATE_TRUNC('month', ordered_at) AS month,
       COUNT(*) AS order_count
FROM   orders
GROUP BY month
ORDER BY month;

செல்லுபடியாகும் பாகங்கள்: 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second'.

வாசிப்புத்திறனுக்காக, நேரம் தேவையில்லாத போது மக்கள் அடிக்கடி DATE க்கு அனுப்புகிறார்கள்: DATE_TRUNC('month', ordered_at)::date.

வேறுபாடுகள் மற்றும் இடைவெளிகள்

இரண்டு TIMESTAMPகளை கழித்தால் INTERVAL:

SQL
SELECT id,
       shipped_at - ordered_at AS wait_time
FROM   orders
WHERE  shipped_at IS NOT NULL;

ஒரு INTERVAL உடன் ஒப்பீடுகள்:

SQL
WHERE  shipped_at - ordered_at > INTERVAL '1 day'

ஒரு தேதியில் நாட்களைச் சேர்த்தல்:

SQL
SELECT signed_up_on + INTERVAL '30 days' AS trial_expiration
FROM   customers;

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#sql.m6.l2.e1
முயற்சிகள்: 0ஏற்றுகிறது…

ஒரு வருடத்திற்கு எத்தனை ஆர்டர்கள் செய்யப்பட்டன என்பதைக் கணக்கிடுங்கள். இரண்டு நெடுவரிசைகள்: ஆண்டு (முழு எண்) மற்றும் ஆர்டர்_கவுண்ட். ஆண்டு ஏறுவரிசைப்படி ஆர்டர் செய்யுங்கள்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

EXTRACT(YEAR FROM order_at) ஒரு NUMERIC ஐ வழங்கும்: படிக்கக்கூடிய தன்மைக்காக ::int உடன் எண்ணுக்கு அனுப்பவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#sql.m6.l2.e2
முயற்சிகள்: 0ஏற்றுகிறது…

2024 ஆம் ஆண்டின் ஒவ்வொரு மாதத்திற்கும், மாதத்தின் முதல் நாள் (நெடுவரிசை மாதம், வகை தேதி) மற்றும் ஆர்டர்களின் எண்ணிக்கையைக் காட்டவும். மாதவாரியாக ஆர்டர் செய்யுங்கள்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

DATE_TRUNC('month', order_at) மாதத்தின் முதல் நாளை நேர முத்திரையாக வழங்கும்; :: தேதி அதை தேதியாக மாற்றுகிறது.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்