MySQL में आज की तुलना में बराबर या उससे अधिक


175

निम्नलिखित करने का सबसे अच्छा तरीका क्या है:

SELECT * FROM users WHERE created >= today;

नोट: बनाया गया एक डेटाइम फ़ील्ड है।

जवाबों:


329
SELECT * FROM users WHERE created >= CURDATE();

लेकिन मुझे लगता है कि तुम मतलब है created < today


11
CURDATE()केवल समय नहीं लौटाएं
शक्ति सिंह

20
@ n00b आपके पास भविष्य में बनाए गए उपयोगकर्ता कैसे हैं ..? रोचक =) मैं यह देखने के लिए उपयोग कर रहा था कि क्या कोई पोस्ट अभी तक समाप्त हो गई है।
गार्ट क्लैबोर्न

75
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

और पढ़ें: http://www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html


6
शायद मुझे कुछ याद आ रहा है, लेकिन DATETIME प्रकार के साथ, CURDATE () समाधान काम नहीं करता है। यह करता है।
जहीम

इसके अलावा इसमें बहुत समय लगता है क्योंकि DATETIME को तिथि (DATE) फ़ंक्शन के माध्यम से परिवर्तित करने में ओवरहेड होता है और फिर जहां स्थिति की तुलना की जाती है।
रोपंक

स्तंभों पर फ़ंक्शन का उपयोग न करें, यह इंडेक्स को अनदेखा करने के लिए क्वेरी बनाता है, जिससे धीमी क्वेरी होती है। वैकल्पिक उत्तर के लिए मेरे उत्तर की जाँच करें stackoverflow.com/a/42365426/4311336
Bsienn

33
SELECT * FROM users WHERE created >= NOW();

यदि स्तंभ डेटाटाइम प्रकार है।


1
मेरा मतलब है कि आज नहीं: डी मुझे आज की जरूरत है 2011-03-03 नहीं 2011-03-03 14:02:02
n00b

@ n00b: यह आज की तुलना में अधिक से अधिक पंक्तियों को लौटाएगा यदि समय शामिल है तो चिंता न करें
शक्ति सिंह

3
यह कहते हैं कि यह 2011-02-02 14:02:02 - 10:02:02 पर बनाए गए उपयोगकर्ता आपके संस्करण में वापस नहीं आएंगे, भले ही वे "आज" बनाए गए थे :)
n00b

@ n00b: योग्य हां, कोई भी उपयोगकर्ता कभी नहीं लौटाया जाएगा, यदि केवल हम समय रोक सकते हैं।
माइक पर्सेल

15

यदि 'बनाया' डेटाइम प्रकार है

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

CURDATE () का अर्थ '2013-05-09 00:00:00' भी है


इसके लिए धन्यवाद। मुझे वास्तव में DATE_SUB की आवश्यकता थी (उसी तरीके से उपयोग की गई), लेकिन इसने मुझे सही रास्ते पर ला दिया।
डैनियल प्राइस

यह डेटा वापस नहीं करेगा जहाँ दिनांक में 0s शामिल हैं, अर्थात '2013-05-09 00:00:00' याद किया जाएगा
Bsienn

8

उत्तर चिह्नित भ्रामक है। कहा गया सवाल है DateTime, लेकिन कहा गया था कि क्या जरूरत थी CURDATE()

इसका सबसे छोटा और सही उत्तर है:

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;

5

यदि स्तंभ में अनुक्रमणिका है और स्तंभ पर कोई फ़ंक्शन लागू है, तो अनुक्रमणिका काम नहीं करती है और पूर्ण तालिका स्कैन होती है, जिससे वास्तव में धीमी गति से क्वेरी होती है।

सूचकांक का उपयोग करने और आज / वर्तमान तिथि के साथ डेटाइम की तुलना करने के लिए , निम्नलिखित का उपयोग किया जा सकता है।

ओपी के लिए समाधान:

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')

आज के लिए डेटा प्राप्त करने के लिए नमूना:

select * from users
where 
    created >= CONCAT(CURDATE(), ' 00:00:00') AND
    created <= CONCAT(CURDATE(), ' 23:59:59')

या शॉर्ट के लिए BETWEEN का उपयोग करें

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')

2
SELECT * FROM users WHERE created >= now()

यह आज से इस क्षण से पहले रिकॉर्ड वापस नहीं करेगा।
gsziszi

0

नीचे दिए गए कोड ने मेरे लिए काम किया।

declare @Today date

Set @Today=getdate() --date will equal today    

Select *

FROM table_name
WHERE created <= @Today


-5

यदि आप सर्वर पर अतिरिक्त भार डालेंगे, तो आप सभी पंक्तियों को वापस कर सकते हैं और php datediff फ़ंक्शन का उपयोग कर सकते हैं।

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}

4
यह डेटाबेस चयन की तुलना में बहुत धीमा है
इग्नाइटकोडर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.