2011-01-17 14 views
9

यह असंभव हो सकता है कि मैं इसे काम करना चाहता हूं, लेकिन यहां जाता है।MySQL: समय की तुलना करें

SELECT * FROM `table` WHERE CAST('05:00:00' AS time) BETWEEN `start` AND `end` 

डेटाबेस में प्रविष्टियों हैं:

`start` = '22:59:59' 
`end` = '06:00:00' 

हालांकि, क्वेरी कोई परिणाम। बेशक, अगर काम शामिल थे तो यह काम करेगा, हालांकि नहीं हैं। अगर शुरुआत = '00: 00: 00 'थी तो यह भी काम करेगा।

+1

तो दिन के समय सभी, मायने रखती है कि दिनांक नहीं है? इसे दो भागों में विभाजित करें (... '00: 00: 00 'और '06: 00: 00' के बीच) या ('22: 59: 59 'और '23: 59: 59' के बीच) शायद? –

+0

... या तर्क को उलटा करें और इसे '06: 00: 00 'और '22: 59: 59' के बीच न बनाएं? –

+0

उस बारे में नहीं सोचा था, इसे करने का निश्चित रूप से एक तरीका है, तर्क सिर्फ आवेदन के संदर्भ में समझ में नहीं आता है। सुझाव के लिए धन्यवाद हालांकि, एकमात्र विकल्प हो सकता है। – jmyz

उत्तर

17

मुझे लगता है कि क्या आप के लिए देख रहे हैं:

SELECT * FROM table WHERE start < CAST('05:00:00' AS time) AND end > CAST('05:00:00' AS time) 

मुझे यकीन है कि आप, CAST रों उपयोग करने की आवश्यकता है, तो हालांकि यह भी काम करना चाहिए नहीं कर रहा हूँ।

SELECT * FROM table WHERE start < '05:00:00' AND end > '05:00:00' 
+0

यहां याद रखने का एक महत्वपूर्ण बिंदु यह है कि यदि आपके समय 24 घंटे प्रारूप में स्वरूपित होते हैं तो आपको क्वेरी में इसे मिलान करने की आवश्यकता होती है, इसलिए उपर्युक्त तालिका से चुनें "चयन करें * कहां से शुरू करें सीएएसटी ('17: 00: 00' एएस टाइम) ' – Chiwda

13
SELECT * 
FROM `table` 
WHERE CAST('05:00:00' AS time) BETWEEN `start` AND `end` 
     OR (NOT CAST('05:00:00' AS time) BETWEEN `end` AND `start` AND `start` > `end`) 
+0

एक विनरर आप –

+1

हैं जो आप उत्सुक हैं! यह वर्तमान के बजाय उत्तर के रूप में मार्कर होना चाहिए! –

4

मैं सिर्फ इस सवाल में आए और मैं एक ही समस्या थी। मेरा समाधान निम्नानुसार है:

SET @time = '05:00:00'; 

SELECT * FROM `table` 
WHERE IF(
     `start` < `end`, 
     CAST(@time AS TIME) BETWEEN `start` AND `end`, 
     (CAST(@time AS TIME) BETWEEN CAST('00:00:00' AS TIME) AND `end`) OR 
     (CAST(@time AS TIME) BETWEEN `start` AND CAST('24:00:00' AS TIME)) 
    ) = 1; 

आशा है कि यह भविष्य में किसी की सहायता करेगी।

संकेत के लिए मार्टिन धन्यवाद!

1

हम समय समय से फ़ंक्शन का उपयोग करके समय की तुलना कर सकते हैं। निम्नलिखित का उपयोग करें:

SELECT id 
FROM table1 
WHERE TIME_TO_SEC('2014-03-05 04:17:47') >= TIME_TO_SEC('2014-03-05 04:17:47'); 
संबंधित मुद्दे