মাইএসকিউএল নির্বাচন করুন যেখানে তারিখের সময় মেলে (এবং প্রয়োজনীয়ভাবে সময় হয় না)


127

আমার একটি টেবিল রয়েছে যার একটি ডেটটাইম কলাম রয়েছে। সময় নির্বিশেষে প্রদত্ত দিনের সমস্ত রেকর্ড ফিরিয়ে দিতে চাই। বা অন্য কথায়, যদি আমার টেবিলটিতে কেবল নিম্নলিখিত 4 টি রেকর্ড থাকে তবে আমি কেবলমাত্র ২ য় এবং তৃতীয় ফিরে আসব যদি আমি 2012-12-25-এ সীমাবদ্ধ থাকি।

2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00

জন Woo দ্বারা উত্তর দেখার stackoverflow.com/questions/14769026/...
ekerner

উত্তর:


326

কখনও কোনও নির্বাচক যেমন ব্যবহার করেন না DATE(datecolumns) = '2012-12-24'- এটি একটি পারফরম্যান্স কিলার:

  • এটি DATE()মেলে না এমনগুলি সহ সমস্ত সারিগুলির জন্য গণনা করবে
  • এটি ক্যোয়ারির জন্য একটি সূচক ব্যবহার করা অসম্ভব করে তুলবে

এটি ব্যবহার করা খুব দ্রুত

SELECT * FROM tablename 
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

এটি গণনা ছাড়াই সূচী ব্যবহারের অনুমতি দেবে।

সম্পাদনা

ব্যবহৃত_বাই_আলডিয়ার নির্দেশিত অনুসারে, ২০১২ সালে আদি উত্তরের পরে, মাইএসকিউএল এর সংস্করণ প্রকাশিত হয়েছে, যেখানে '23: 59: 59 'দিনের ব্যবহার হিসাবে ব্যবহার করা আর নিরাপদ নয়। একটি আপডেট সংস্করণ পড়া উচিত

SELECT * FROM tablename 
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'

উত্তরের সংক্ষিপ্ত বিবরণ, অর্থাত গণনাযুক্ত অভিব্যক্তিতে নির্বাচককে এড়ানো অবশ্যই অবধারিত।


আমি মন্তব্য করতে চলেছিলাম যে a1ex07 এর সমাধানটি অন্যদের মতো ভাল বলে মনে হচ্ছে না। আপনার পোস্ট পড়ার পরে, আমার আমার চিন্তাভাবনা বিপরীত করা প্রয়োজন!
ব্যবহারকারী 1032531

2
উপরোক্ত দুটি সার্ভারে কেবল পরীক্ষিত হ'ল তারিখের চেয়ে অনেক বেশি (কমপক্ষে 10x) দ্রুত () = '' বিশেষত বিশাল টেবিলগুলির জন্য। ধন্যবাদ
জাজ্পার

1
@ কনরাডভিল্টারস্টেন আমি কোয়েরিটিকে আরও পাঠযোগ্য ও আখ্যায়িত করার জন্য বাক্যটির বাক্য গঠনের একটি খুব ভার্জিক পদ্ধতি ব্যবহার করেছি, আওটকে সংশোধন করে। A1ex07 এর উত্তরের বিচ্ছিন্ন বাক্য গঠন রয়েছে।
ইউজেন রিইক

9
@KonradViltersten - এখনো ভালো: WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY। 0 সময় এড়াতে এবং জন্য কাজ করে DATE, DATETIME, DATETIME(6), ইত্যাদি এবং LEAP দিনের ইত্যাদি সঙ্গে পুলিশ
রিক জেমস

1
'2012-12-25 23:59:59' দিনের শেষ দিন হিসাবে খালি নয়, এটি সর্বদা একটি খারাপ ধারণা ছিল এবং এটি মাইএসকিউএলের সংস্করণগুলির জন্য বাগগুলি তৈরি করবে যা উপ-দ্বিতীয়বারের যথার্থতা সমর্থন করে। রিক জেমস (উপরে) বা a1ex07 (অন্যান্য উত্তর)
ব্যবহারটি

34

... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'এর চেয়ে সম্ভাব্য আরও ভাল কাজ করতে পারে (যদি আপনার তারিখ_কলামে একটি সূচক থাকে) DATE


1
আমি আসলে আশ্চর্য কি দ্রুত কি - এই বা BETWEENসমাধান ... কেউ বেকমার্ক?
jave.web

6
এটি কোনও পার্থক্য হওয়া উচিত নয়। BETWEENকেবল লেখার উপায় field >= value1 and fied<= value2
a1ex07

1
মাইএসকিউএল ম্যানুয়াল অনুসারে নোট করুন: "তারিখ বা সময় মানগুলির সাথে বিটউইউইন ব্যবহার করার সময় সেরা ফলাফলের জন্য মানগুলি স্পষ্টভাবে পছন্দসই ডেটা টাইপে রূপান্তর করতে CAST () ব্যবহার করুন amples উদাহরণস্বরূপ: আপনি যদি DATETIME কে দুটি তারিখের মানের সাথে তুলনা করেন, তবে DATE রূপান্তর করুন DATETIME মানগুলিতে মানগুলি you সুতরাং যদি না তারা সমস্ত একই ধরণের হয় তবে এগুলি স্পষ্টভাবে কাস্ট করা ভাল।
টেকডুড

21

আপনি ব্যবহার করতে পারেন %:

SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'

13
DATE (ডেটটাইমকোল) এর মতো ধীর বলে মনে হচ্ছে। ইউজেন বা a1ex07 এর সমাধানটি আরও ভাল ব্যবহার করুন।
মেরি ফিশার

3
এটি সবসময় গতি সম্পর্কে নয়। সুতরাং আমি এই সমাধানটি পছন্দ করি। এটি অনেক বেশি পাঠযোগ্য।
সাইমন হ্যানসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.