মাইএসকিউএল ক্যোয়ারী - আজ এবং শেষ 30 দিনের মধ্যে রেকর্ডস


122

আমি 30 দিনের মধ্যে ডাটাবেসে যুক্ত হওয়া সমস্ত রেকর্ড ফিরিয়ে দিতে চাই। প্রদর্শনের উদ্দেশ্যে আমাকে তারিখটি মিমি / ডিডি / ওয়াইতে রূপান্তর করতে হবে।

create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y')) 

আমার বিবৃতিটি গত 30 দিনের রেকর্ড সীমাবদ্ধ করতে ব্যর্থ হয়েছে - এটি সমস্ত রেকর্ড নির্বাচন করে।

কেউ কি আমাকে সঠিক দিকে নির্দেশ করতে পারে? মনে হচ্ছে আমি কাছে এসেছি।

ধন্যবাদ এবং একটি মহান সপ্তাহে.

উত্তর:


292

আপনাকে DATE_FORMATএই SELECTধারাটিতে আবেদন করতে হবে, WHEREধারাটি নয়:

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()

এছাড়াও মনে রাখবেন যে CURDATE()কেবলমাত্র DATEতারিখের অংশটি ফেরত দেয়, তাই আপনি যদি সময় পূরণের সময় create_dateহিসাবে সংরক্ষণ করে থাকেন তবে DATETIMEএই ক্যোয়ারী আজকের রেকর্ড নির্বাচন করবে না।

এই ক্ষেত্রে, NOWপরিবর্তে আপনাকে ব্যবহার করতে হবে:

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()

এই উত্তরের দ্বিতীয় অংশটি খুব গুরুত্বপূর্ণ! আমার হয়ত সমস্যা ছিল বা নাও হতে পারে এবং আমি এই উত্তরটি না আসা পর্যন্ত আমি আমার মাথা আঁচড়াচ্ছিলাম।
টাইলার লাজেনবি

@ কাসনোই আমি দুঃখিত এটি ওয়ার্ডপ্রেস বলে মনে হচ্ছে \ wpdb প্রস্তুত করার সমস্যাটিই। আবার দুঃখিত.
ve

56
SELECT
    *
FROM
    < table_name >
WHERE
    < date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();

2
আমি এই পদ্ধতিটি অগ্রাধিকারের তুলনায় (খ্রিস্টপূর্ব 30) - ইন্টার্ভাল 30
ড্যান

1
@ এরমসো আমি জানতে পারি কেন?
পাতলা

3
আমি মিথ্যা বলব না - এটি 2 বছর আগে ছিল এবং আমি মনে করতে পারি না! দুঃখিত: পি
ড্যান

1
ব্যবহার করার দরকার নেইDATE_FORMAT(create_date, '%m/%d/%Y')
কাজী

@ ড্যান আমি পূর্বের তারিখটি বন্ধনীগুলিতে আবদ্ধ করে এটিকে আরও পঠনযোগ্য করে তুলতে পছন্দ করি: ... WHERE create_date BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW()
ক্রিস ক্রেইগ

10

DATE_FORMATএকটি স্ট্রিং ফেরত দেয়, তাই আপনি আপনার ধারাটিতে দুটি স্ট্রিং ব্যবহার করছেন BETWEEN, যা আপনার প্রত্যাশার মতো কাজ করবে না।

পরিবর্তে, তারিখে আপনার ফরমেটে রূপান্তর করুন SELECTএবং BETWEENআসল তারিখগুলি করুন। উদাহরণ স্বরূপ,

SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted
FROM table
WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE()

9

আপনি এটি mysql এও লিখতে পারেন -

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date < DATE_ADD(NOW(), INTERVAL -1 MONTH);

FIXED


2
সাবধান: আপ-ভোট থাকা সত্ত্বেও, এটি পরবর্তী 30 দিন / মাসে তারিখগুলি নির্বাচন করে, গত 30 দিনে নয়!
জোনব্রেভ

4
সম্মত, WHERE create_date> DATE_ADD (NOW (), INTERVAL -1 MONTH) হওয়া উচিত;
ভাভিক পি।

6

বর্তমান তারিখের ক্রিয়াকলাপ এবং পূর্ববর্তী ৩০ দিনের সম্পূর্ণ ক্রিয়াকলাপের জন্য এটি ব্যবহার করুন, যেহেতু SYSDATE কোনও দিন পরিবর্তনশীল হয় আগের 30 তম দিনটিতে সেই দিনের পুরো ডেটা থাকবে না।

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()

1

curdate()ফাংশনটি ব্যবহার না করেই এখানে একটি সমাধান রয়েছে, এটি TSQLআমার ধারণা যারা ব্যবহার করেন তাদের জন্য এটি একটি সমাধান

SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.