মাইএসকিএলে বর্তমান তারিখের সময় থেকে 30 দিন কীভাবে বিয়োগ করবেন?


194

আমি কীভাবে বর্তমান তারিখের থেকে 30 দিনের মধ্যে মাইএসকিএল বিয়োগ করব?

SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();

উত্তর:



127

যে কেউ ব্যবহার করতে চান না তাদের জন্য DATE_SUB, ব্যবহার করুন CURRENT_DATE:

SELECT CURRENT_DATE - INTERVAL 30 DAY

2
আমি যদি এই +10 দিতে পারতাম। এসকিউএল পাঠযোগ্যতা সম্পর্কে সমস্ত হওয়া উচিত এবং এটি করার সর্বাধিক পঠনযোগ্য উপায় এটি।
কলিন 'হার্ট

9
ব্যবহারের চেয়ে বেশি পঠনযোগ্য তবে ভিন্ন ফলাফল NOW() - INTERVAL 30 DAY। যেহেতু প্রশ্নটিতে "বর্তমান তারিখের সময় থেকে 30 দিন বিয়োগ" উল্লেখ করা হয়েছে , এটি ওপি কী চায় তা হতে পারে না।
ypercubeᵀᴹ

2
@ ypercubeᵀᴹ এর পরে ব্যবহার current_timestampকরুনcurrent_date
ইস্পির

21

আসুন NOW()আপনি যে কোনও ক্যোয়ারী ক্যাচিং বা অপ্টিমাইজেশন হারাচ্ছেন তা ব্যবহার করবেন না কারণ প্রতিবারই ক্যোয়ারী আলাদা। মাইএসকিউএল ডকুমেন্টেশনে আপনার ব্যবহার করা উচিত নয় এমন ফাংশনগুলির তালিকা দেখুন ।

নীচের কোডে, ধরে নেওয়া যাক এই টেবিলটি সময়ের সাথে বাড়ছে। নতুন স্টাফ যুক্ত হয়েছে এবং আপনি গত 30 দিনের মধ্যে কেবল স্টাফ প্রদর্শন করতে চান। এটি সবচেয়ে সাধারণ ঘটনা।

নোট করুন যে তারিখটি একটি স্ট্রিং হিসাবে যুক্ত করা হয়েছে। আপনার ক্যাসিং কোডটি NOW()ফাংশনটি ব্যবহার না করে আপনার কলিং কোড থেকে এইভাবে তারিখটি যুক্ত করা ভাল ।

SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);

আপনি BETWEENযদি এই দ্বিতীয় দ্বিতীয় থেকে 30 দিনের আগে সত্যিই কেবল জিনিসটি চান তবে আপনি এটি ব্যবহার করতে পারেন , তবে এটি আমার অভিজ্ঞতার মধ্যে সাধারণ ব্যবহারের ঘটনা নয়, তাই আমি আশা করি সরলীকৃত ক্যোয়ারী আপনাকে ভালভাবে পরিবেশন করতে পারে।


3
সুতরাং আপনি কোনও ব্যবহার না করার প্রস্তাব দিয়েছেন NOW()এবং এখনও আপনার উত্তরে এটি ব্যবহার করুন। o_O PS: আপনার ক্যোয়ারী আরও একটি ফলাফল ফিরিয়ে আনবে , ওপি সম্ভবত যা চায় না
zerkms

@zerkms কীভাবে এই কোয়েরিটি আপনার প্রশ্নের চেয়ে আলাদা ফলাফল সেট করবে?
ব্যবহারকারী 784637

2
@ ব্যবহারকারী 784637: আহ, BETWEENএবং >=বিভিন্ন অপারেটর, আপনি কি জানেন? আমার প্রশ্নের সাথে ফলাফলের জন্য নির্ধারিত সীমা 30 days ago AND today, এই everything after 30 days ago। সুতরাং tomorrowরেকর্ডগুলি আমার এবং আপনার মূল ক্যোয়ারীর সাথে মেলে না, তবে এই উত্তরটির সাথে মিলবে
zerkms

ঠিক আছে, আমার খারাপ। সাধারণত এ জাতীয় প্রশ্নগুলি লাইভ টেবিলগুলিতে থাকে যা সময়ের সাথে বাড়ছে। এজন্যই আমি মাঝখানে নামিয়ে দিয়েছি। আমি আমার উত্তর উপরে ব্যাখ্যা করেছি।
জোসেফ লাস্ট

@ জোসফ্লাস্ট, পারফরম্যান্স সম্পর্কিত সমস্যাগুলি সমাধান করতে, পরিবর্তে আমার সমাধানটি ব্যবহার করুন।
পেসারিয়ার

17

মাইএসকিউএল এখন থেকে বিয়োগের দিন:

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 


1
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')

আপনি এসকিউএল এ তারিখ ফর্ম্যাট ব্যবহার করে ফর্ম্যাট করতে পারেন।


0

অন্য উপায়

SELECT COUNT(*) FROM tbl_debug WHERE TO_DAYS(`when`) < TO_DAYS(NOW())-30 ;

0

আপনার যদি কেবল সময় প্রয়োজন হয় তবে সময় প্রয়োজন হয় না:

select*from table where exec_datetime
between subdate(curdate(), 30)and curdate();

যেহেতু curdate()সময়ের উপাদানটিকে বাদ দেয়, এটি সম্ভাব্য চেয়ে দ্রুততরnow() আপনি কেবল তারিখে আগ্রহী এমন ক্ষেত্রে এবং "শব্দার্থগতভাবে সঠিক" হতে পারে।

এছাড়াও, subdate()এর 2-আরটি ওভারলোড ব্যবহারের চেয়ে সম্ভাব্য দ্রুত intervalintervalযখন আপনার অ-দিনের উপাদান প্রয়োজন তখন কেসগুলির জন্য বোঝানো হয়।


11
তো, আপনি দাবি করছেন যে এর subdate(curdate(), 30)চেয়ে দ্রুততম CURRENT_DATE - INTERVAL 30 DAY? আপনার কি প্রমাণ আছে? এবং এটি কত দ্রুত হবে? কয়েকটা মাইক্রোসেকেন্ড?
ypercubeᵀᴹ

2
আমার কোন ধারণা নাই. আমি অবশ্যই আমার নিজের মন্তব্যকে উজ্জীবিত করতে পারি না। "সম্ভাব্য" দ্রুত দাবি সম্পর্কে, আমি এখনও কোনও প্রমাণ, সিদ্ধান্তমূলক বা পরিস্থিতি দেখতে পাচ্ছি না। এবং এটি কিছুটা দ্রুত হলেও শর্তটি একবার মূল্যায়ন করা হবে। আপনি যদি প্রতি মিনিটে কয়েক মিলিয়ন বার ক্যোয়ারী চালনা না করেন তবে পার্থক্যটি বিবেচনা করবে না।
ypercubeᵀᴹ

2
আমি অনুমান করছি যে subdateএটি সম্ভবত "2-arity ওভারলোড" দ্বারা আপনার মতে, সম্ভবত কোনওভাবেই ব্যাখ্যা করা হয়েছে, তবে দয়া করে আমাকে ক্ষমা করুন, যদি এই শব্দগুলির অর্থ কী (কোনও অনুষ্ঠানের প্রতি শ্রদ্ধার সাথে) )? বিশেষত, "2-arity" কী?
অ্যান্ড্রি এম

1
এছাড়াও, যতদূর প্রশ্নের বাক্যটি বলা যায়, curdate()আসলে এটি ভুল পছন্দ হতে পারে, কারণ ওপি "বর্তমান তারিখের সময় থেকে 30 দিন" বিয়োগ করতে চায় বলে মনে করেছে (জোর খনি)।
অ্যান্ড্রি এম

1
@ অ্যান্ড্রিএম, আচ্ছা যেহেতু এই থ্রেডটি ৫০ কে ভিউ পেয়েছে, আমি কেবল উত্তর সময়ের সাথে আগ্রহী লোকদের জন্য উত্তরটি এখানে রেখে দেব। এবং "আরটি" সম্পর্কিত, এটি আর্গুমেন্টের সংখ্যা উল্লেখ করে । হ্যাঁ এটি সঠিক, সমস্ত জিনিস সমান হওয়ার জন্য, একটি 2-আরটি ফাংশন 3-arity এর চেয়ে সম্ভাব্য দ্রুত। প্লেটে নতুন তথ্য না যুক্ত হওয়া পর্যন্ত এটি সত্যই থাকবে।
পেসারিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.