2012-11-22 21 views
19

के साथ तुलना की गई है, मैंने गोगल किया और तारीख की तुलना करने के कई तरीकों की कोशिश की लेकिन दुर्भाग्य से अपेक्षित परिणाम नहीं मिला। मैं निम्नलिखित की तरह रिकॉर्ड की वर्तमान स्थिति है:mysql दिनांक दिनांक दिनांक_format

 mysql> select date_format(date(starttime),'%d-%m-%Y') from data; 

       +-----------------------------------------+ 
       | date_format(date(starttime),'%d-%m-%Y') | 
       +-----------------------------------------+ 
       | 28-10-2012        | 
       | 02-11-2012        | 
       | 02-11-2012        | 
       | 02-11-2012        | 
       | 03-11-2012        | 
       | 03-11-2012        | 
       | 07-11-2012        | 
       | 07-11-2012        | 

मैं तिथि तुलना करने के लिए है और इसलिए इस तरह करना चाहते हैं:

 mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012'; 
       +-----------------------------------------+ 
       | date_format(date(starttime),'%d-%m-%Y') | 
       +-----------------------------------------+ 
       | 28-10-2012        | 
       | 02-11-2012        | 
       | 02-11-2012        | 
       | 02-11-2012        | 
       | 03-11-2012        | 
       | 03-11-2012        | 
       | 07-11-2012        | 
       | 07-11-2012        | 

मुझे विश्वास है कि परिणाम '28 शामिल नहीं होना चाहिए -10-2012 ' । कोई उपाय? अग्रिम में धन्यवाद।

उत्तर

37

आपका प्रारूप मूलरूप से एक sortable एक के साथ शुरू करने के लिए नहीं है - आप तार तुलना कर रहे हैं, और स्ट्रिंग "28-10-2012" "2012/02/11" इससे अधिक है।

इसके बजाय, आपको दिनांक दिनांक के रूप में तुलना करना चाहिए, और उसके बाद आउटपुट के लिए उन्हें केवल अपने लक्षित प्रारूप में परिवर्तित करना चाहिए।

इस प्रयास करें:

select date_format(date(starttime),'%d-%m-%Y') from data 
where date(starttime) >= date '2012-11-02'; 

(इनपुट हमेशा साल महीने की मूल्य रूप में होना चाहिए, प्रति the documentation के रूप में।)

ध्यान दें कि यदि starttime एक DATETIME क्षेत्र है, तो आप कर सकते हैं बार-बार रूपांतरण से बचने के लिए क्वेरी को बदलने पर विचार करें। (अनुकूलक अच्छी तरह से यह से बचने के लिए बहुत चालाक हो सकता है, लेकिन यह जाँच के लायक है।)

select date_format(date(starttime),'%d-%m-%Y') from data 
where starttime >= '2012-11-02 00:00:00'; 

(ध्यान दें कि यह d-m-Y के रूप में एक तारीख को स्वरूपित करने के साथ शुरू करने के लिए असामान्य है - यह सामान्य रूप में y-M-d उपयोग करने के लिए बेहतर होगा, आईएसओ -8601 मानक इत्यादि होने के बावजूद, उपर्युक्त कोड आपके द्वारा प्रश्न में पूछे जाने वाले प्रश्नों को करता है।)

+0

बहुत धन्यवाद, यह वही है जो मैं ढूंढ रहा हूं :)। –

+1

@ महमूदगामल: आपका संपादन समझ में नहीं आता है। Syntax 'date '2012-11-02'' ** का उपयोग करके दिनांक शाब्दिक निर्दिष्ट करना ** मान्य है (वास्तव में यह दिनांक अक्षर निर्दिष्ट करने के लिए SQL मानक है)। यहां देखें: http://sqlfiddle.com/#!2/d41d8/4020 –

+0

@ जोनस्केट: आप SQL मानक शाब्दिक का उपयोग करके डेटाटाइम शाब्दिक भी निर्दिष्ट कर सकते हैं: 'timestamp '2012-11-02 00:00:00' '(एक" सादा "स्ट्रिंग का उपयोग करने के बजाय)। –

1

02-11-2012 के बजाय 2012-11-02 का उपयोग करें और आपको date_format() की आवश्यकता नहीं होगी

0

निम्न विधि का उपयोग करें:

public function dateDiff ($date1, $date2) { 
/* Return the number of days between the two dates: */ 
    return round(abs(strtotime($date1)-strtotime($date2))/86400); 
} 
/* end function dateDiff */ 

इससे मदद मिलेगी!

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