सबसे पहले, MySQL तिथियों में आमतौर पर निम्नलिखित प्रारूप होते हैं जब परोक्ष रूप से परिवर्तित होते हैं - 2015-01-16
- के बजाय 20150116
. मुझे लगता है कि आप MySQL और दोनों में निम्न कार्य कर सकते हैं Oracle (यह मानक SQL है) - मैंने इसे Oracle (10g) में चेक किया है और यह काम करता है, और यह काम करता प्रतीत होता है MySQL के साथ मेरी फ़िडलिंग में
:
SELECT * FROM mytable
WHERE mydate IN ( DATE '2015-01-16', DATE '2015-01-18' );
DATE में कनवर्ट करने के लिए स्ट्रिंग अक्षर yyyy-mm-dd
के रूप में होना चाहिए . अब यह काम करेगा यदि आपकी तिथियाँ तारीख हैं और समय का हिस्सा नहीं है। अब यदि आपकी तिथियों में एक समय भाग है, तो चीजें और अधिक कठिन हो जाती हैं क्योंकि MySQL DATE()
. का उपयोग करता है दिनांक भाग प्राप्त करने के लिए कार्य करता है, जबकि Oracle TRUNC()
. का उपयोग करेगा . लेकिन आप >=
. के विवेकपूर्ण उपयोग से इससे निजात पा सकते हैं और <
, उदा.:
SELECT * FROM mytable
WHERE ( mydate >= DATE '2015-01-16' AND mydate < DATE '2015-01-17' )
OR ( mydate >= DATE '2015-01-18' AND mydate < DATE '2015-01-19' );
अब यदि आप SYSDATE
. का उपयोग करना चाहते हैं , करने के लिए सबसे अच्छी बात एएनएसआई मानक CURRENT_DATE
. का उपयोग करना होगा या CURRENT_TIMESTAMP
. इनकी तुलना सीधे स्वरूपण की आवश्यकता के बिना की जा सकती है और इन्हें MySQL और Oracle दोनों में काम करना चाहिए। आप INTERVAL
. का उपयोग करके दिनांक अंकगणित भी कर सकते हैं , इस मामले में आप निम्न कोशिश कर सकते हैं:
SELECT * FROM mytable
WHERE mydate > CURRENT_DATE - INTERVAL '1' DAY;
अपडेट करें मैं इस बारे में कुछ सोच रहा हूं। यदि आप आज दर्ज की गई सभी पंक्तियों को प्राप्त करना चाहते हैं तो तुरंत ऊपर दी गई क्वेरी वास्तव में काम नहीं करती है . कठिनाई यह है कि ओरेकल एएनएसआई तिथि अक्षर को तिथियों के रूप में पहचानता है (अर्थात, बिना किसी समय भाग के), लेकिन जहां तक मुझे पता है, दिनांक/समय मान (जो एक Oracle DATE
. है है) एक तारीख . तक . उस ने कहा, Oracle और MySQL दोनों EXTRACT() फ़ंक्शन का समर्थन करते हैं, इसलिए आपको आज प्राप्त करने के लिए निम्न कार्य करने में सक्षम होना चाहिए के रिकॉर्ड:
SELECT * FROM mytable
WHERE EXTRACT(YEAR FROM mydate) = EXTRACT(YEAR FROM CURRENT_DATE)
AND EXTRACT(MONTH FROM mydate) = EXTRACT(MONTH FROM CURRENT_DATE)
AND EXTRACT(DAY FROM mydate) = EXTRACT(DAY FROM CURRENT_DATE);
निश्चित रूप से बोझिल, खासकर यदि किसी के पास विचार करने के लिए एक से अधिक तिथियां हैं (जो मुझे लगता है कि आप ऐसा करते हैं क्योंकि आप IN
का उपयोग कर रहे हैं ऑपरेटर), लेकिन दोनों प्लेटफार्मों पर काम करना चाहिए। यहां SQL Fiddle डेमो देखें (MySQL)
और यहां (ओरेकल)
।