निम्नलिखित प्रश्न:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
कुछ नहीं देता।
यद्यपि कार्य करने के लिए मेरे पास पर्याप्त डेटा से अधिक होना चाहिए। मैं क्या गलत कर रहा हूं?
निम्नलिखित प्रश्न:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
कुछ नहीं देता।
यद्यपि कार्य करने के लिए मेरे पास पर्याप्त डेटा से अधिक होना चाहिए। मैं क्या गलत कर रहा हूं?
जवाबों:
आपकी दूसरी तारीख आपकी पहली तारीख से पहले है (यानी आप 29 सितंबर 2010 से 30 जनवरी 2010 के बीच क्वेरी कर रहे हैं)। तिथियों के क्रम को उलटने का प्रयास करें:
SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
where
खंड पर select
या update
बयानों पर समान काम करना चाहिए ।
है date_field
प्रकार के datetime
? इसके अलावा आपको सबसे पहले ईयरलर की तारीख डालनी होगी।
यह होना चाहिए:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
DATE () एक MySQL फ़ंक्शन है जो किसी दिनांक या दिनांक / समय की अभिव्यक्ति का केवल दिनांक भाग निकालता है
SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';
@Sabin से जवाब के विस्तार के रूप में और एक संकेत यदि कोई दिनांक भाग की तुलना केवल समय के बिना करना चाहता है :
यदि तुलना करने का क्षेत्र टाइप डेटाइम से है और तुलना के लिए केवल दिनांक निर्दिष्ट हैं, तो इन तिथियों को आंतरिक रूप से डेटाइम मान में बदल दिया जाता है। इसका मतलब है कि निम्नलिखित क्वेरी
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
में परिवर्तित हो जाएगा
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
आंतरिक रूप से।
यह बदले में 2010-09-29 से 00:00:00 से अधिक समय के मूल्य वाली वस्तुओं को शामिल नहीं करता है!
इस प्रकार, यदि दिनांक २०१०-०९ -२९ के साथ सभी वस्तुओं को भी शामिल किया जाना चाहिए, तो तुलना करने के लिए क्षेत्र को तारीख में बदलना होगा:
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
आप इसे मैन्युअल रूप से कर सकते हैं, अधिक से अधिक या बराबर और कम से कम या बराबर के साथ तुलना करके।
select * from table_name where created_at_column >= lower_date and created_at_column <= upper_date;
हमारे उदाहरण में, हमें किसी विशेष दिन से डेटा पुनर्प्राप्त करने की आवश्यकता है। हम दिन की शुरुआत से दूसरे दिन में नवीनतम दूसरे से तुलना करेंगे।
select * from table_name where created_at_column >= '2018-09-01 00:00:00' and created_at_column <= '2018-09-05 23:59:59';
सर्वर साइड या क्लाइंट साइड पर दिनांक कॉन्फ़िगरेशन के साथ कोई समस्या हो सकती है। मैंने इसे कई डेटाबेस पर एक सामान्य समस्या के रूप में पाया है जब मेजबान को स्पेनिश, फ्रेंच या जो कुछ भी कॉन्फ़िगर किया गया है ... जो प्रारूप dd / mm / yyyy या mm / dd / yyyy को प्रभावित कर सकता है।
दिनांक और समय मानों का उपयोग करते समय, आपको फ़ील्ड को इस रूप में डालना होगा DateTime
और नहीं Date
। प्रयत्न :
SELECT * FROM `objects`
WHERE (CAST(date_field AS DATETIME)
BETWEEN CAST('2010-09-29 10:15:55' AS DATETIME) AND CAST('2010-01-30 14:15:55' AS DATETIME))
min
औरmax
मानों को सीमा में माना जाता है, किसी भी तिथि को दो बार संसाधित नहीं करने के लिएmin
औरmax
मूल्य (एज केस)। उदाहरण के लिए, तारीख और के बीच2010-09-29 00:00:00
होगा , और ALSO के बीच और2010-09-28 00:00:00
2010-09-29 00:00:00
2010-09-29 00:00:00
2010-09-30 00:00:00