মাইএসকিউএল আজকের সমান তারিখ নির্বাচন করুন


99

আমি একটি মাইএসকিএল নির্বাচনের বিবৃতি চালানোর চেষ্টা করছি যেখানে এটি আজকের তারিখের দিকে তাকান এবং কেবলমাত্র বর্তমান দিনে সাইন আপ করা ফলাফলগুলি প্রত্যাবর্তন করে। আমি বর্তমানে নিম্নলিখিতগুলি চেষ্টা করে দেখেছি, তবে এটি কার্যকর হবে বলে মনে হচ্ছে না।

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE users.signup_date = CURDATE()

আমি আমার SELECTবক্তব্যটি এতে পরিবর্তন করেছি , ধন্যবাদ বন্ধুরা।

SELECT id FROM users WHERE DATE(signup_date) = CURDATE()


মনে হচ্ছে এটি signup_date
ডেটটাইম

@ সেরজিও হ্যাঁ, এটি বর্তমানে একটি তারিখের ক্ষেত্র।
জাকো

কি ডাটাটাইপ হয় signup_dateযদি এটা সময় রয়েছে, তারপর আপনি মধ্যে DATE_FORMAT ব্যবহার করতে চান হবে WHEREদফা সময় স্ট্রিপ মেলেCURDATE()
Taryn

@ ব্লুয়েফিট ধন্যবাদ, আমি আমার স্ক্রিপ্টটি পরিবর্তন করেছি। দেখে মনে হচ্ছে এটি কাজ করছে, কিন্তু যখন কোনও ফলাফল নেই। mysql_num_rows0 প্রদর্শন করে না। খালি খালি।
জাকো

উত্তর:


203
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE(signup_date) = CURDATE()

ডেট () এমনকি ফিল্ডটি টাইপ টাইপ ব্যবহার করা কি প্রয়োজনীয়?
রাশিদঙ্ক

4
@rashidnk নং যদিও তিনি পরিষ্কারভাবে প্রশ্নে বলেননি, ক্ষেত্র দৃশ্যত ধরনের হয় DATETIME
বার্মার

4
যদিও এই সমাধানটি একেবারে সঠিক, এটি ভাল স্কেল করে না ( signup_dateএমন কোনও সূচক বিদ্যমান থাকলেও কোনও সূচক ব্যবহার করতে পারে না )। সেরজিওর দ্রবণ পছন্দ করুন ।
র্যান্ডমসইড

বা যদি কোনও নির্দিষ্ট তারিখে সন্ধান করতে হয় তবে সূচকটিও নির্বাচন করুন `` `ব্যবহারকারীদের নির্বাচন করুন id -30 00:00:00 'এবং সাইনআপ_ তারিখ <=' 2017-08-30 23:59:59 '; `` `
সুমিত এম আসক

4
@ সুমিতমাসোক < '2017-08-31 00:00:00'আপনি মাইএসকিউএলের একটি সংস্করণ মিলিসেকেন্ড সহ ব্যবহার করার ক্ষেত্রে ব্যবহার করা আরও ভাল ।
বার্মার

30

এই ক্যোয়ারীটি যদি signup_dateক্ষেত্রের জন্য থাকে তবে সূচি ব্যবহার করবে

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE signup_date >= CURDATE() && signup_date < (CURDATE() + INTERVAL 1 DAY)

4
এই উত্তরের ডাউনভোটগুলি অযৌক্তিক। এটি প্রকৃতপক্ষে পছন্দসই পদ্ধতি, কারণ এই signup_dateপদ্ধতির অন্যান্য পদ্ধতির বিপরীতে কোনও সূচককে উত্সাহ দিতে সক্ষম হবে।
র্যান্ডমসিড

4
@ র্যান্ডমসিড signup_dateদুটি সময়ের মধ্যে পরীক্ষা করার সাধারণ ধারণাটি সঠিক তবে সময়টি তা নয়। এটি বর্তমান তারিখের মধ্যে 00:00এবং এর মধ্যে হওয়া উচিত 23:59:59
বার্মার

ঠিক আছে তারিখের ব্যবধানটিও ভুল ছিল> <ডাউনভোটগুলি মোটেও অবাস্তব ছিল না।
র্যান্ডমসিড

এই ক্যোয়ারীটি আরও বেশি পারফরম্যান্ট (সূচকের কারণে)। WHERE DATE(signup_date) = CURDATE()আমার সার্ভারে ~ 50 MS নেন, এই এক এখানে 0.8 MS।
কাই নোক


1

আপনি ব্যবহার করতে পারেন CONCATসঙ্গে CURDATE()দিনের সমগ্র সময় এবং ব্যবহার করে তারপর ফিল্টার BETWEENমধ্যে WHEREশর্ত:

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE (users.signup_date BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59'))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.