আমি মাইএসকিউএল ব্যবহার করে দুটি তারিখের মধ্যে কীভাবে জিজ্ঞাসা করব?


225

নিম্নলিখিত কোয়েরি:

SELECT * FROM `objects` 
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')

কিছুই না।

যদিও ক্যোয়ারিটি কাজ করতে পারে তার জন্য আমার কাছে পর্যাপ্ত পরিমাণের বেশি থাকা উচিত। আমি কি ভুল করছি?


32
উভয় minএবং maxমান উভয়ই সীমার মধ্যে বিবেচনা করা হয় , সুতরাং উভয় এবং সতর্কতার সাথে সাবধান হন, তারিখের দ্বিগুণ প্রক্রিয়া না করার জন্য যেটি হয় মান minএবং maxমান (প্রান্তের কেস)। উদাহরণ হিসেবে বলা যায়, তারিখ 2010-09-29 00:00:00হতে হবে মধ্যে 2010-09-28 00:00:00এবং2010-09-29 00:00:00 , এবং মধ্যে 2010-09-29 00:00:00এবং2010-09-30 00:00:00
minipif

হ্যাঁ, তিনি যা বলেছিলেন ^^
অ্যালবার্ট রেনিটস্পারগার

উত্তর:


471

আপনার দ্বিতীয় তারিখটি আপনার প্রথম তারিখের আগে (যেমন আপনি 29 শে সেপ্টেম্বর 2010 এবং 30 শে জানুয়ারী 2010 এর মধ্যে জিজ্ঞাসা করছেন)। তারিখের ক্রমটি উল্টানোর চেষ্টা করুন:

SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

আমি এটি জানতাম তবে এখন আপডেটের সাথে ইস্যু হয়েছে। আমি আপডেটের জন্য বিটওয়িন ব্যবহার করার চেষ্টা করছি এটি কি একইভাবে কাজ করা উচিত?
ইংগাস

3
@ ইঙ্গাসগ্রাহলস্কিস: একটি whereধারা selectবা updateবিবৃতিতে একই কাজ করা উচিত ।
T30

ব্যক্তিগতভাবে, আমি শব্দটি 'থেকে' এবং 'থেকে' একটি স্নিগ্ধ উপায় খুঁজে পেয়েছি যাতে ক্যোয়ারীটি লেখা উচিত the
কেগানফুচে

উভয় তারিখ শূন্য বা খালি থাকলে কীভাবে সমস্ত ডেটা ফেরত পাবেন?
কোডিং ওয়ার্ল্ড

23

আপনার জিজ্ঞাসার তারিখটি হওয়া উচিত

select * from table between `lowerdate` and `upperdate`

চেষ্টা

SELECT * FROM `objects` 
WHERE  (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

20

কি date_fieldধরনের datetime? এছাড়াও আপনাকে প্রথমে কানের খোলার তারিখ স্থাপন করা দরকার।

এটা করা উচিত:

SELECT * FROM `objects` 
WHERE  (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

17

তারিখ () একটি মাইএসকিউএল ফাংশন যা কেবল একটি তারিখ বা তারিখ / সময় প্রকাশের তারিখের অংশটি বের করে

SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';

আপনি একটি ব্যাখ্যা যোগ করতে পারেন যাতে লোকেরা বুঝতে পারে যে আপনি কী করছেন।
ফ্রাঞ্জ গ্লাইচমান

6

@ সাইবিনের উত্তরের বর্ধন এবং কোনও ইশারা যদি কেবলমাত্র তারিখের অংশটি (সময় ব্যতীত) তুলনা করতে চায় তবে :

ক্ষেত্র তুলনা ধরণ থেকে থাকে তবে DATETIME এবং শুধুমাত্র তারিখ তুলনা জন্য নির্দিষ্ট করা হয়, তাহলে এই তারিখ অভ্যন্তরীণভাবে রূপান্তরিত হয় DATETIME মান। এর অর্থ হল নিম্নলিখিত কোয়েরি

SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')

রূপান্তর করা হবে

SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')

অভ্যন্তরীণভাবে।

ফলস্বরূপ এটি এমন ফলাফলের দিকে নিয়ে যায় যা ২০১০-০৯-২০১৯ সময়কালের সময়গুলি 00:00:00 এর চেয়ে বেশি সময়ের সাথে অন্তর্ভুক্ত করে না!

সুতরাং, 2010-09-29 তারিখের সাথে সমস্ত বস্তুগুলিকেও অন্তর্ভুক্ত করা উচিত, তুলনার ক্ষেত্রটি একটি তারিখে রূপান্তর করতে হবে:

SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')

4

বৃহত্তর বা সমান এবং কম বা সমান বা তার সাথে তুলনা করে আপনি এটি ম্যানুয়ালি করতে পারেন।

 select * from table_name where created_at_column  >=   lower_date  and  created_at_column <= upper_date;

আমাদের উদাহরণস্বরূপ, আমাদের একটি নির্দিষ্ট দিন থেকে প্রতিদিন তথ্য পুনরুদ্ধার করতে হবে। আমরা দিনের শুরু থেকে অন্য দিনের সর্বশেষ দ্বিতীয়টির সাথে তুলনা করব।

  select * from table_name where created_at_column  >=   '2018-09-01 00:00:00'  and  created_at_column <= '2018-09-05 23:59:59';

1

সার্ভার সাইডে বা ক্লায়েন্ট সাইডে তারিখের কনফিগারেশন নিয়ে সমস্যা হতে পারে। হোস্টটি স্প্যানিশ, ফরাসি বা যে কোনও কিছুতে কনফিগার করা থাকলে ... যা ডিডি / মিমি / ইয়াই বা মিমি / ডিডি / ইয়াই ফর্ম্যাটটিকে প্রভাবিত করতে পারে এমন একাধিক ডাটাবেজে এটি একটি সাধারণ সমস্যা হিসাবে আমি পেয়েছি।


3
সমস্যাটি ছিল পুরানো তারিখটি নতুন তারিখের আগে তালিকাভুক্ত করা হয়েছিল।
ততদিনজাগ্রেগ

1

তারিখ হিসাবে খালি তারিখ_ফিল্ড

SELECT * FROM `objects` 
WHERE (cast(date_field as date) BETWEEN '2010-09-29' AND 
'2010-01-30' )

1

তারিখ এবং সময় মানগুলি ব্যবহার করার সময়, আপনাকে অবশ্যই ক্ষেত্রগুলি কাস্ট করা উচিত DateTimeএবং না হিসাবে Date। চেষ্টা করুন:

SELECT * FROM `objects` 
WHERE (CAST(date_field AS DATETIME) 
BETWEEN CAST('2010-09-29 10:15:55' AS DATETIME) AND CAST('2010-01-30 14:15:55' AS DATETIME))

0

চারদিকে তারিখগুলি পরিবর্তন করার চেষ্টা করুন:

2010-09-29 > 2010-01-30?
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.