2010-01-11 11 views
7

सभी के बीच टाइमस्टैम्प पुनर्प्राप्त करें,MYSQL - दिनांक

मेरे पास टाइमस्टैम्प नामक कॉलम वाला एक MYSQL तालिका है। यह DATETIME डेटाटाइप है और इसमें "10/1/2009 3:25:08 अपराह्न", "10/1/2009 3:30:05 अपराह्न", "10/4/2009 3:40:01 अपराह्न" जैसे मान हैं। , आदि ..

मैं दो तिथियों के बीच टाइमस्टैम्प क्षेत्र घटित में सभी मूल्यों को चुनने के लिए एक SQL क्वेरी लिखने के लिए .. कुछ इस तरह हैं:

select timestamp from tablename where timestamp >= userStartDate and timestamp <= userEndDate 

userInput दिनांकों समय भाग नहीं होगा। आप इस के लिए सही MySQL क्वेरी सिंटेक्स सुझाव है सकते हैं? धन्यवाद

+0

"यह समय-समय पर संपत्ति का है" का मतलब है कि इसका मतलब है कि इसमें 'डेटाटाइम' डेटाटाइप है? – Quassnoi

+0

हां। यह सही है – Jake

उत्तर

14
SELECT timestamp 
FROM tablename 
WHERE timestamp >= userStartDate 
     AND timestamp < userEndDate + INTERVAL 1 DAY 

यह हर रिकॉर्ड havi का चयन करेंगे userStartDate और userEndDate के बीच एनजी दिनांक भाग, बशर्ते कि इन फ़ील्ड में DATE (समय के बिना) के प्रकार हों।

तार के रूप में आ आरंभ और समाप्ति तिथि, तो STR_TO_DATE का उपयोग किसी भी प्रारूप से परिवर्तित करने के लिए: जब तिथि या समय मूल्यों के साथ BETWEEN का उपयोग कर

SELECT timestamp 
FROM tablename 
WHERE timestamp >= STR_TO_DATE('01/11/2010', '%m/%d/%Y') 
     AND timestamp < STR_TO_DATE('01/12/2010', '%m/%d/%Y') + INTERVAL 1 DAY 
+0

हम्म .. क्या उपयोगकर्ता स्टार्टडेट "10/01/2009" के प्रारूप में हो सकता है? (मिमी/डीडी/yyyy) – Jake

8
SELECT timestamp 
FROM myTable 
WHERE timestamp BETWEEN startDate AND endDate 

सर्वोत्तम परिणामों के लिए, आप का उपयोग करना चाहिए मूल्यों को वांछित डेटा प्रकार में स्पष्ट रूप से रूपांतरित करने के लिए CAST()। उदाहरण: यदि आप DATETIME से दो DATE मानों की तुलना करते हैं, तो DATE मानों को DATETIME मानों में कनवर्ट करें। यदि आप की तुलना में स्ट्रिंग स्थिरांक जैसे '2001-1-1' का उपयोग करते हैं, तो स्ट्रिंग को DATE पर डालें।

-http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

+1

यदि 'स्टार्टडेट' और 'एंडडेट' दोनों '11 जनवरी, 2010' हैं, तो यह केवल 'टाइमस्टैम्प = 11 जनवरी, 2010 00: 00: 00' के साथ रिकॉर्ड का चयन करेगा, सभी रिकॉर्ड' दिनांक भाग में 11 जनवरी। – Quassnoi

+0

आप सही हैं, Quassnoi। यदि उपयोगकर्ता डेटा के साथ यह संभव है, तो 24 घंटे जोड़ें (जैसा कि आपने अपने उदाहरण में किया था)। मैंने माना था कि उपयोगकर्ता क्वेरी के भीतर डेटटाइम मानों का उपयोग करेगा। – Sampson

4

userInput दिनांकों टाइम स्टांप नहीं होगा। आप के साथ टाइमस्टैम्प के उपयोगकर्ता इनपुट परिवर्तित कर सकते हैं:

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19'); 
     -> 1196440219 

आपकी क्वेरी बन सकता है:

select timestamp from tablename 
where timestamp >= UNIX_TIMESTAMP(userStartDate) 
and timestamp <= UNIX_TIMESTAMP(userEndDate) 
2

यदि आपके दो टाइमस्टैंप के बीच एक घटना क्वेरी करने के लिए की तलाश में, एक कैलेंडर या कुछ और जहां आरंभ और अंत के लिए कर रहे हैं एक टाइमस्टैम्प के रूप में संग्रहीत आप इस

$qry = "SELECT * 
     FROM `table` 
     WHERE '$today_start' >= `event_start` 
      AND '$today_start' <= `event_end`"; 
संबंधित मुद्दे