আমি কীভাবে বর্তমান তারিখের থেকে 30 দিনের মধ্যে মাইএসকিএল বিয়োগ করব?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
আমি কীভাবে বর্তমান তারিখের থেকে 30 দিনের মধ্যে মাইএসকিএল বিয়োগ করব?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
উত্তর:
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
যে কেউ ব্যবহার করতে চান না তাদের জন্য DATE_SUB, ব্যবহার করুন CURRENT_DATE:
SELECT CURRENT_DATE - INTERVAL 30 DAY
NOW() - INTERVAL 30 DAY। যেহেতু প্রশ্নটিতে "বর্তমান তারিখের সময় থেকে 30 দিন বিয়োগ" উল্লেখ করা হয়েছে , এটি ওপি কী চায় তা হতে পারে না।
current_timestampকরুনcurrent_date
আসুন NOW()আপনি যে কোনও ক্যোয়ারী ক্যাচিং বা অপ্টিমাইজেশন হারাচ্ছেন তা ব্যবহার করবেন না কারণ প্রতিবারই ক্যোয়ারী আলাদা। মাইএসকিউএল ডকুমেন্টেশনে আপনার ব্যবহার করা উচিত নয় এমন ফাংশনগুলির তালিকা দেখুন ।
নীচের কোডে, ধরে নেওয়া যাক এই টেবিলটি সময়ের সাথে বাড়ছে। নতুন স্টাফ যুক্ত হয়েছে এবং আপনি গত 30 দিনের মধ্যে কেবল স্টাফ প্রদর্শন করতে চান। এটি সবচেয়ে সাধারণ ঘটনা।
নোট করুন যে তারিখটি একটি স্ট্রিং হিসাবে যুক্ত করা হয়েছে। আপনার ক্যাসিং কোডটি NOW()ফাংশনটি ব্যবহার না করে আপনার কলিং কোড থেকে এইভাবে তারিখটি যুক্ত করা ভাল ।
SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);
আপনি BETWEENযদি এই দ্বিতীয় দ্বিতীয় থেকে 30 দিনের আগে সত্যিই কেবল জিনিসটি চান তবে আপনি এটি ব্যবহার করতে পারেন , তবে এটি আমার অভিজ্ঞতার মধ্যে সাধারণ ব্যবহারের ঘটনা নয়, তাই আমি আশা করি সরলীকৃত ক্যোয়ারী আপনাকে ভালভাবে পরিবেশন করতে পারে।
NOW()এবং এখনও আপনার উত্তরে এটি ব্যবহার করুন। o_O PS: আপনার ক্যোয়ারী আরও একটি ফলাফল ফিরিয়ে আনবে , ওপি সম্ভবত যা চায় না
BETWEENএবং >=বিভিন্ন অপারেটর, আপনি কি জানেন? আমার প্রশ্নের সাথে ফলাফলের জন্য নির্ধারিত সীমা 30 days ago AND today, এই everything after 30 days ago। সুতরাং tomorrowরেকর্ডগুলি আমার এবং আপনার মূল ক্যোয়ারীর সাথে মেলে না, তবে এই উত্তরটির সাথে মিলবে
মাইএসকিউএল এখন থেকে বিয়োগের দিন:
select now(), now() - interval 1 day
ছাপে:
2014-10-08 09:00:56 2014-10-07 09:00:56
অন্যান্য বিরতি টেম্পোরাল এক্সপ্রেশন ইউনিট যুক্তি:
https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals
select now() - interval 1 microsecond
select now() - interval 1 second
select now() - interval 1 minute
select now() - interval 1 hour
select now() - interval 1 day
select now() - interval 1 week
select now() - interval 1 month
select now() - interval 1 year
আপনি ব্যবহার করতে পারেন
select CURDATE()-INTERVAL 30 DAY
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')
আপনি এসকিউএল এ তারিখ ফর্ম্যাট ব্যবহার করে ফর্ম্যাট করতে পারেন।
আপনার যদি কেবল সময় প্রয়োজন হয় তবে সময় প্রয়োজন হয় না:
select*from table where exec_datetime
between subdate(curdate(), 30)and curdate();
যেহেতু curdate()সময়ের উপাদানটিকে বাদ দেয়, এটি সম্ভাব্য চেয়ে দ্রুততরnow() আপনি কেবল তারিখে আগ্রহী এমন ক্ষেত্রে এবং "শব্দার্থগতভাবে সঠিক" হতে পারে।
এছাড়াও, subdate()এর 2-আরটি ওভারলোড ব্যবহারের চেয়ে সম্ভাব্য দ্রুত interval।
intervalযখন আপনার অ-দিনের উপাদান প্রয়োজন তখন কেসগুলির জন্য বোঝানো হয়।
subdate(curdate(), 30)চেয়ে দ্রুততম CURRENT_DATE - INTERVAL 30 DAY? আপনার কি প্রমাণ আছে? এবং এটি কত দ্রুত হবে? কয়েকটা মাইক্রোসেকেন্ড?
subdateএটি সম্ভবত "2-arity ওভারলোড" দ্বারা আপনার মতে, সম্ভবত কোনওভাবেই ব্যাখ্যা করা হয়েছে, তবে দয়া করে আমাকে ক্ষমা করুন, যদি এই শব্দগুলির অর্থ কী (কোনও অনুষ্ঠানের প্রতি শ্রদ্ধার সাথে) )? বিশেষত, "2-arity" কী?
curdate()আসলে এটি ভুল পছন্দ হতে পারে, কারণ ওপি "বর্তমান তারিখের সময় থেকে 30 দিন" বিয়োগ করতে চায় বলে মনে করেছে (জোর খনি)।