নিম্নলিখিত কোয়েরি:
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')
তারিখ () একটি মাইএসকিউএল ফাংশন যা কেবল একটি তারিখ বা তারিখ / সময় প্রকাশের তারিখের অংশটি বের করে
SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';
@ সাইবিনের উত্তরের বর্ধন এবং কোনও ইশারা যদি কেবলমাত্র তারিখের অংশটি (সময় ব্যতীত) তুলনা করতে চায় তবে :
ক্ষেত্র তুলনা ধরণ থেকে থাকে তবে DATETIME এবং শুধুমাত্র তারিখ তুলনা জন্য নির্দিষ্ট করা হয়, তাহলে এই তারিখ অভ্যন্তরীণভাবে রূপান্তরিত হয় DATETIME মান। এর অর্থ হল নিম্নলিখিত কোয়েরি
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')
অভ্যন্তরীণভাবে।
ফলস্বরূপ এটি এমন ফলাফলের দিকে নিয়ে যায় যা ২০১০-০৯-২০১৯ সময়কালের সময়গুলি 00:00:00 এর চেয়ে বেশি সময়ের সাথে অন্তর্ভুক্ত করে না!
সুতরাং, 2010-09-29 তারিখের সাথে সমস্ত বস্তুগুলিকেও অন্তর্ভুক্ত করা উচিত, তুলনার ক্ষেত্রটি একটি তারিখে রূপান্তর করতে হবে:
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';
সার্ভার সাইডে বা ক্লায়েন্ট সাইডে তারিখের কনফিগারেশন নিয়ে সমস্যা হতে পারে। হোস্টটি স্প্যানিশ, ফরাসি বা যে কোনও কিছুতে কনফিগার করা থাকলে ... যা ডিডি / মিমি / ইয়াই বা মিমি / ডিডি / ইয়াই ফর্ম্যাটটিকে প্রভাবিত করতে পারে এমন একাধিক ডাটাবেজে এটি একটি সাধারণ সমস্যা হিসাবে আমি পেয়েছি।
তারিখ এবং সময় মানগুলি ব্যবহার করার সময়, আপনাকে অবশ্যই ক্ষেত্রগুলি কাস্ট করা উচিত 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হতে হবে মধ্যে2010-09-28 00:00:00এবং2010-09-29 00:00:00, এবং মধ্যে2010-09-29 00:00:00এবং2010-09-30 00:00:00