2011-01-21 11 views
7

मैं उस पंक्ति का चयन करने का एक तरीका ढूंढ रहा हूं जिसमें वर्तमान समय पंक्ति में दो सेट मानों के बीच है। मैंने 3 कॉलम वाली एक टेबल सेट की है, उनमें से 2 में टाइमस्टैम्प (एचएच: एमएम: एसएस) है, दूसरा एक स्ट्रिंग है। क्या कोई तरीका है कि मैं वर्तमान समय से संबंधित स्ट्रिंग प्राप्त कर सकता हूं? एक और अधिक सार रास्ते में कहें:MySQL का चयन करें: जहां (समय अब) = tablevalue और tablevalue

चयन स्ट्रिंग TableName से जहां (वर्तमान समय) के बीच (निचली सीमा समय मान) और (ऊपरी सीमा समय मान);

alt text

तो बुनियादी तौर पर, वर्तमान समय के आधार, मेरी स्क्रिप्ट उत्पादन सही स्ट्रिंग चाहिए।

मैं इसके बारे में कैसे जा सकता हूं? धन्यवाद!

+0

किस प्रकार 'low_limit' और 'upper_limit' हैं? – Quassnoi

+1

क्या आपकी रात दो दिनों में फैली हुई है? '22: 00: 00' और '05: 00: 00 'के बीच शायद आप जो भी इंतजार कर रहे हैं उसे वापस नहीं करेंगे। – eumiro

+0

@ यूमिरो: अच्छा बिंदु! – Mchl

उत्तर

5

MySQL में, टाइमस्टैम्प काफी भ्रामक शब्द है।

SELECT String 
FROM TableName 
WHERE CURTIME() BETWEEN lowerlimit AND upperlimit 
     OR CURTIME() BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit 
     OR SUBTIME(CURTIME(), '24:00:00') BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit 

यह आधी रात बदलाव सही ढंग से संभाल लेंगे:

अगर वे कर रहे हैं lowerlimit और upperlimitTIME00:00:00 से 23:59:59 के स्तंभ हैं।

+1

पहले वही गलती की। अब() में दिनांक भाग भी शामिल है। CURTIME() का उपयोग किया जाना चाहिए। डाउनवोट मुझसे नहीं। – Mchl

+0

@Mchl: मैं क्यों? – Quassnoi

+0

?? सुनिश्चित नहीं है कि आप किस बारे में पूछ रहे हैं। वैसे भी आपका जवाब प्रश्नों को दूसरों की तुलना में काफी बेहतर बनाता है। – Mchl

2

रास्ता तुमने काफी है:

SELECT String FROM TableName WHERE CURTIME() BETWEEN (Lower Limit Time Value) AND (Upper Limit Time Value); 
+0

क्या ब्रैकेट भी MySQL में सही हैं? मैं वाक्यविन्यास से परिचित नहीं हूं और मैं फिलहाल PHP के माध्यम से अपने प्रश्नों में 'कुछ' (सामान्य 'उद्धरण' काम नहीं कर रहा हूं) का उपयोग कर रहा हूं। – Chris

+0

नहीं बैकटिक्स (') गैर मानक कॉलम नामों को सीमित करने के लिए सही तरीका हैं। यानी – Mchl

4
SELECT string_col 
FROM your_table 
WHERE CURTIME() BETWEEN lower_limit_col AND upper_limit_col 
+0

दिखाने के लिए धन्यवाद मुझे कॉलम नामों का उपयोग करना चाहिए :-) – Chris

2

दो कॉलमों का प्रकार समय होना चाहिए (और टाइमस्टैम्प नहीं)। फिर, इसका जवाब आपके सवाल में है:

select string from tablename where curtime() between lowerlimit and upperlimit 

बस सुनिश्चित करें कि रात does not है, हालांकि 6:00:00-22:00:00 से जाने के लिए है, या यह काम नहीं करेगा। लेकिन आप शक्ति के लिए दो अंतराल पेश कर सकते हैं: 22:00:00 से 24:00:00 तक, और दूसरा 00:00:00 से 06:00:00 तक।

+0

आह, मेरे पास सौभाग्य से उन संक्रमण नहीं हैं, हालांकि सिर के लिए धन्यवाद! – Chris

संबंधित मुद्दे