मॉड्यूल पाठ (4/4)
CAST और प्रकार रूपांतरण
SQL दृढ़ता से टाइप किया गया है: प्रत्येक कॉलम का एक प्रकार होता है (INTEGER, TEXT,
NUMERIC, DATE, TIMESTAMP…), और कई परिचालनों के लिए प्रकारों की आवश्यकता होती है
मैच करने के लिए। जब वे ऐसा नहीं करते - या जब आप किसी मान को प्रारूपित करना चाहते हैं
अलग ढंग से - आप कास्ट का उपयोग करते हैं।
दो समकक्ष वाक्यविन्यास
-- SQL standard:
CAST(123 AS TEXT)
-- PostgreSQL shorthand (più comune nella pratica):
123::textदोनों रूप एक जैसे हैं. शॉर्टहैंड ::type अधिक संक्षिप्त और है
अन्य अभिव्यक्तियों के साथ अच्छी तरह से जंजीरें:
SELECT ordered_at::date AS day,
(oi.quantity * oi.unit_price)::numeric(10,2) AS total,
id::text || ' - ' || email AS label
FROM …;डेटासेट पर उपयोगी कास्ट
TIMESTAMP → DATE ordered_at::date
NUMERIC → INTEGER price::int -- tronca!
INTEGER → NUMERIC quantity::numeric -- per evitare div. intera
INTEGER → TEXT id::text -- per concatenare con ||
TEXT → DATE '2024-03-05'::date
NUMERIC → TEXT price::text -- per LIKE su numeriजब कोई कलाकार विफल हो सकता है
SELECT 'abc'::int; -- ERRORE: invalid input syntax for type integer
SELECT '12.5'::int; -- ERRORE: invalid input syntax for type integer
SELECT 12.5::int; -- 12 (cast numerico-numerico: arrotonda)स्ट्रिंग → नंबर या स्ट्रिंग → दिनांक से कास्ट करना सबसे जोखिम भरा है:
यदि स्ट्रिंग अपेक्षित से बिल्कुल मेल नहीं खाती है तो वे एक त्रुटि उत्पन्न करते हैं
प्रारूप. उत्पादन में, बाहरी डेटा पर, पहले सत्यापन करना सबसे अच्छा है
TRIM / LOWER / regex के साथ।
कास्ट करें और ऑर्डर करें
एक मामला जो सूक्ष्म बग उत्पन्न करता है: संख्याओं को क्रमबद्ध करना पाठ के रूप में संग्रहीत।
SELECT '2', '10', '1' ORDER BY 1; -- '1', '10', '2' (alfabetico!)समाधान: ORDER BY के अंदर डालें:
SELECT code FROM articles ORDER BY code::int;इसे अजमाएं
प्रत्येक ऑर्डर के लिए, आईडी और दिन दिखाएं (केवल order_at का दिनांक भाग, दिनांक प्रकार का)। दो कॉलम. आईडी द्वारा ऑर्डर करें.
संकेत दिखाएँ
टाइमस्टैम्प → दिनांक कास्ट समय को कम कर देता है: order_at::date।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
प्रत्येक ग्राहक के लिए एक लेबल कॉलम दिखाएं जो आईडी और ईमेल को '-' से अलग करता है (उदाहरण के लिए '1 - alice.rossi@example.com')। आईडी द्वारा ऑर्डर करें.
संकेत दिखाएँ
|| ऑपरेटर को एक ही प्रकार के ऑपरेंड की आवश्यकता होती है: आईडी को टेक्स्ट में डालना सबसे साफ तरीका है।
3 प्रयासों के बाद समाधान उपलब्ध है