दिलचस्प पोस्ट
नॉरटरन का क्या मतलब है? क्या मैं एक इटरेटर लिख सकता हूं जो स्वयं को बदलता है और फिर अपने आप में एक संदर्भ उत्पन्न करता है? .mobileconfig से डिवाइस UDID प्राप्त करना थ्रेड के बीच डेटा एक्सचेंज के लिए एचटी के साथ एक कोर पर निष्पादित करने के लिए क्या उपयोग किया जाएगा? कैसे एक कीस्ट्रोक के साथ थोड़ी देर लूप को मारने के लिए? कैसे एक धागा को समय समाप्ति के लिए मैं कैसे देखूं कि मेरे proc में कौन से आउटपुट विकल्प उपलब्ध हैं? मैं कैसे निर्धारित कर सकता हूं कि कोई फ़ाइल सी # में द्विआधारी या पाठ है? कैसे iPhone फोटो लाइब्रेरी के लिए तस्वीर को बचाने के लिए? संख्याबद्ध सूचीबॉक्स क्यों एक्सएमएल सीरियलिज़ेबल वर्ग को पैरासेलेबल कन्स्ट्रक्टर की आवश्यकता है Angular.JS: समान नियंत्रक साझा करने वाले दृश्य, दृश्य बदलते समय मॉडल डेटा रीसेट करता है UIViewContentModeScaleAspectFill क्लिपिंग नहीं भरें इस openmp कोड में विभाजन गलती क्यों हो रही है? बूटस्ट्रैप आइकन स्थानीय रूप से लोड किए जाते हैं लेकिन ऑनलाइन नहीं होते हैं

दिनांक समय कॉलम से तिथि कैसे चुनूं?

मेरे पास 2009-10-20 10:00:00 जैसे मूल्यों के साथ "दिनांक समय" प्रकार का एक स्तंभ है

मैं दिनांक समय से तारीख निकालना चाहूंगा और इस तरह एक प्रश्न लिखूंगा:

SELECT * FROM data WHERE datetime = '2009-10-20' ORDER BY datetime DESC 

क्या यह करने का सबसे अच्छा तरीका है?

 SELECT * FROM data WHERE datetime BETWEEN('2009-10-20 00:00:00' AND '2009-10-20 23:59:59') ORDER BY datetime DESC 

यह फिर से एक खाली resultset देता है कोई सुझाव?

वेब के समाधान से एकत्रित समाधान "दिनांक समय कॉलम से तिथि कैसे चुनूं?"

 WHERE DATE(datetime) = '2009-10-20' 

या यह भी प्रयास करें और देखें कि क्या यह काम नहीं करता है या नहीं। क्या यह मदद करता है

WHERE datetime LIKE '2009-10-20%'

आपको यह जांचना होगा कि वह कहाँ पर काम नहीं करता है।

WHERE DATE(datetime) = '2009-10-20' का उपयोग करते हुए प्रदर्शन समस्याएं हैं जैसा कि यहां बताया गया है :

  • यह DATE() की सभी पंक्तियों के लिए गणना करेगा, उन सहित, जो मेल नहीं खाते
  • यह क्वेरी के लिए सूचकांक का उपयोग करना असंभव बना देगा

BETWEEN या > , < , = ऑपरेटरों का उपयोग करें जो एक इंडेक्स का उपयोग करने की अनुमति देते हैं:

 SELECT * FROM data WHERE datetime BETWEEN '2009-10-20 00:00:00' AND '2009-10-20 23:59:59' 

अद्यतन: किसी अनुक्रमित कॉलम में ऑपरेटर के बजाय LIKE का उपयोग करने पर प्रभाव उच्च है ये 1,176,000 पंक्तियों के साथ तालिका पर कुछ परीक्षण परिणाम हैं:

  • datetime LIKE '2009-10-20%' => 2931ms का उपयोग कर
  • datetime >= '2009-10-20 00:00:00' AND datetime <= '2009-10-20 23:59:59' => 168ms

एक ही प्रश्न पर दूसरी कॉल करते समय अंतर अधिक होता है: 2 9 84 9 बनाम 7ms (हां, सिर्फ 7 मिलीसेकेंड!)। मुझे हाइबरनेट का उपयोग करते हुए एक प्रोजेक्ट पर कुछ पुराने कोड को दोबारा लिखते समय यह मिला।

आप YMD भाग के लिए दिनांक समय प्रारूपित कर सकते हैं:

 DATE_FORMAT(datetime, '%Y-%m-%d') 

हालांकि पृष्ठ पर सभी उत्तर अपेक्षित परिणाम लौटेगा, हालांकि सभी के पास प्रदर्शन समस्याएं हैं WHERE खंड में फ़ील्ड पर गणना कीजिए (एक DATE() गणना सहित) कि गणना तालिका में सभी पंक्तियों पर की जानी चाहिए।

दोनों के BETWEEN ... AND निर्माण दोनों सीमा स्थितियों के लिए समावेशी है, एक को अंत की तारीख पर 23:59:59 सिंटैक्स निर्दिष्ट करने की आवश्यकता होती है, जिसमें स्वयं के अन्य मुद्दों (माइक्रोसॉन्क लेनदेन, जो कि मेरा मानना ​​है कि MySQL 2009 में प्रश्न का समर्थन नहीं करता था यह पूछा गया था)।

एक विशेष दिन के लिए एक MySQL timestamp फ़ील्ड को पूछने का उचित तरीका है, वांछित तारीख के खिलाफ ग्रेटर-थान-इक्वलल्स की जांच करना और दिन के बाद कम-से-कम, निर्दिष्ट कोई भी घंटे के साथ नहीं।

 WHERE datetime>='2009-10-20' AND datetime<'2009-10-21' 

यह सबसे तेज़ प्रदर्शन वाला, सबसे कम-स्मृति, कम-संसाधन गहन पद्धति है, और इसके अतिरिक्त सभी MySQL सुविधाओं और कोने के मामलों जैसे उप-सेकंड टाइमस्टैम्प सटीक का समर्थन करता है। इसके अतिरिक्त, यह भविष्य प्रमाण है

आप उपयोग कर सकते हैं:

 DATEDIFF ( day , startdate , enddate ) = 0 

या:

 DATEPART( day, startdate ) = DATEPART(day, enddate) AND DATEPART( month, startdate ) = DATEPART(month, enddate) AND DATEPART( year, startdate ) = DATEPART(year, enddate) 

या:

 CONVERT(DATETIME,CONVERT(VARCHAR(12), startdate, 105)) = CONVERT(DATETIME,CONVERT(VARCHAR(12), enddate, 105)) 

तिथि समारोह का उपयोग करने के लिए सरल और सबसे अच्छा तरीका

उदाहरण

 SELECT * FROM data WHERE date(datetime) = '2009-10-20' 

या

 SELECT * FROM data WHERE date(datetime ) >= '2009-10-20' && date(datetime ) <= '2009-10-20' 

खैर, जैसा कि वक्तव्य की तरह प्रयोग करना सबसे अच्छा विकल्प है, जहां '2009-10-20%' जैसे समय सारणी, इस मामले में यह काम करना चाहिए