हर बार जब आप वापस लौटना चाहते हैं तो आपको एक पंक्ति स्रोत की आवश्यकता होती है। फिर आप लौटाई जाने वाली पंक्तियों का चयन करने के लिए जॉइन ऑपरेशन का उपयोग कर सकते हैं।
अगर आपके पास इस तरह की टेबल होती:
CREATE TABLE cal (tm TIME NOT NULL PRIMARY KEY) ENGINE=InnoDB ;
INSERT INTO cal (tm) VALUES ('00:00:00'),('00:30:00');
INSERT INTO cal (tm) SELECT ADDTIME(tm,'01:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'02:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'04:00:00') FROM cal;
...
तब आप इसे अपनी क्वेरी में इस्तेमाल कर सकते हैं:
SELECT v.id
, c.tm
FROM myview v
JOIN cal c
ON c.tm >= v.hour_from
AND c.tm <= v.hour_to
ORDER BY v.id, c.tm
यदि आप किसी विशिष्ट प्रारूप में समय मान चाहते हैं, तो आप DATE_FORMAT
. का उपयोग कर सकते हैं समारोह:
SELECT v.id
, DATE_FORMAT(c.tm,'%H:%i') AS hour_
यह मानता है कि दृश्य द्वारा लौटाए गए मान TIME
हैं डेटा प्रकार। यदि वे नहीं हैं, तो आप उन्हें रूपांतरित करना चाहेंगे। (या आप एक ही परिणाम एक विहित प्रारूप में वर्ण स्ट्रिंग के साथ काम कर प्राप्त कर सकते हैं।)
नोट:यह अनिवार्य नहीं है कि आपके पास एक टेबल हो; यह कोई भी पंक्ति स्रोत हो सकता है, जैसे इनलाइन दृश्य। आपको बस पर्याप्त पंक्तियों की आवश्यकता है (आपके मामले में, 00:00 से 23:30 तक आधे घंटे की वृद्धि मानते हुए, यह 48 पंक्तियाँ हैं।)
यदि आपके पास कोई समय सीमा है जो मध्यरात्रि की सीमा को "पार" करती है (उदाहरण के लिए 22:00 से 02:00), तो उदाहरण क्वेरी कोई पंक्ति नहीं लौटाएगी। आपको समायोजन करना होगा।
कुछ इस तरह:
JOIN cal c
ON ( t.hour_from <= t.hour_to
AND c.tm >= v.hour_from
AND c.tm <= v.hour_to
)
OR ( t.hour_from > t.hour_to
AND ( c.tm <= v.hour_from
OR c.tm >= v.hour_to
)
)