মাইএসকিউএলে ডেটটাইম সমান বা আজকের চেয়ে বড়


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 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);

চলতি () এর অর্থ '2013-05-09 00:00:00'


এর জন্য ধন্যবাদ. আমার আসলে DATE_SUB (একইভাবে ব্যবহৃত) দরকার ছিল, তবে এটি আমাকে সঠিক পথে ফেলেছে।
ড্যানিয়েল দাম

এটি এমন ডেটা ফেরত দেবে না যেখানে তারিখে সময় 0 সেকেন্ড থাকে, অর্থাৎ '2013-05-09 00:00:00' বাদ
পড়বে

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

-1
SELECT * FROM table_name WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING(json_date, 3, 2 ) ) >= NOW();

json_date ["05/11/2011"]


এটি একটি খুব কাঁচা সমাধান
IgniteCoders

-5

আপনি সমস্ত সারিটি ফিরিয়ে দিতে পারেন এবং যদি কোনও বিবৃতিতে পিএইচপি ডেটেডিফ ফাংশন ব্যবহার না করেন তবে এটি সার্ভারে অতিরিক্ত বোঝা চাপিয়ে দেবে।

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

4
এটি ডাটাবেস নির্বাচনের তুলনায় খুব ধীর
IgniteCoders
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.