দুটি তারিখের মধ্যে তারিখের পরিসীমা থেকে ডেটা নির্বাচন করুন


104

আমার নামযুক্ত একটি টেবিল Product_Salesরয়েছে এবং এটি এর মতো ডেটা ধারণ করে

Product_ID | Sold_by | Qty | From_date  | To_date
-----------+---------+-----+------------+-----------
3          | 12      | 7   | 2013-01-05 | 2013-01-07
6          | 22      | 14  | 2013-01-06 | 2013-01-10
8          | 11      | 9   | 2013-02-05 | 2013-02-11

এখন যদি আমি তারিখের ব্যাপ্তি থেকে দুটি তারিখের মধ্যে বিক্রয় ডেটা নির্বাচন করতে চাই তবে কোয়েরিটি কী?

উদাহরণস্বরূপ, আমি থেকে বিক্রয় তথ্য নির্বাচন করতে চান 2013-01-03করতে 2013-01-09


To_date> 2013-01-03 এবং প্রেরক <2013-01-09। ?
jpulikkottil

উত্তর:


149

অন্তর ছেদ বর্ণনা

আপনি দেখতে পাচ্ছেন, জিনিসগুলি সম্পন্ন করার জন্য দুটি উপায় রয়েছে:

  • সমস্ত গ্রহণযোগ্য বিকল্প তালিকাভুক্ত করুন
  • সমস্ত ভুল বিকল্প বাদ দিন

স্পষ্টতই, দ্বিতীয় উপায়টি অনেক বেশি সহজ (চারজনের বিরুদ্ধে কেবল দুটি মামলা)।

আপনার এসকিউএল দেখতে পাবেন:

SELECT * FROM Product_sales 
WHERE NOT (From_date > @RangeTill OR To_date < @RangeFrom)

14
আমি কেবল বলতে চাই যে আমি ভালোবাসি যে আপনি উত্তরটি ব্যাখ্যা করতে একটি সাদা বোর্ডে এঁকেছিলেন। আপনি আমার শ্রদ্ধা এবং আমার প্রশংসা আছে।
বেন Bynum

4
আমি জানি যে এই সমস্যাটি বেশ পুরানো তবে আপনি যদি এই শর্তটিটি না চান বা ব্যবহার করতে না পারেন WHERE NOTতবে অপারেটরগুলি ঘুরিয়ে দেওয়া এবং সমান যোগ করাও কাজটি করছে: SELECT * FROM Product_sales WHERE From_date <= @RangeTill OR To_date >= @RangeFrom
লরেনজ গ্ল্যাক

@ লরেনজগ্লুক না OR, এটি হওয়া উচিত SELECT * FROM Product_sales WHERE From_date <= @RangeTill AND To_date >= @RangeFrom
অ্যান্ডিফ

87
SELECT * from Product_sales where
(From_date BETWEEN '2013-01-03'AND '2013-01-09') OR 
(To_date BETWEEN '2013-01-03' AND '2013-01-09') OR 
(From_date <= '2013-01-03' AND To_date >= '2013-01-09')

আপনাকে সমস্ত সম্ভাবনা কভার করতে হবে। থেকে_ তারিখ বা তো_ তারিখ আপনার তারিখের সীমা হতে পারে বা রেকর্ডের তারিখগুলি পুরো ব্যাপ্তিটি কভার করতে পারে।

যদি এর মধ্যে একটি From_dateবা To_dateতারিখের মধ্যে থাকে, বা From_dateশুরু হওয়ার তারিখের চেয়ে কম To_dateহয় এবং শেষের তারিখের চেয়ে বেশি হয়; তাহলে এই সারিটি ফেরত দেওয়া উচিত।


পৃষ্ঠার উত্তর (Y)
গ্রিনরোবো

যদি উভয় ইনপুট করার তারিখটি বাতিল বা খালি হয় তবে কীভাবে সমস্ত ডেটা ফেরত পাবেন? এবং এছাড়াও, তারিখের কোনওটি যদি শূন্য হয় বা খালি হয় সেই মানদণ্ডের ভিত্তিতে ফলাফল পাওয়া উচিত
ওয়ার্ড কোডিং

40

রেঞ্জের মধ্যে তারিখগুলি পেতে নিম্নলিখিত কোয়েরিটি ব্যবহার করে দেখুন:

SELECT  *
FROM    Product_sales 
WHERE   From_date >= '2013-01-03' AND
        To_date   <= '2013-01-09'

8
এটি সমস্ত সম্ভাবনা কভার করে না!
ফ্যালেনএঞ্জেল

@ ফ্যালেনএঞ্জেল, আপনি কি দয়া করে আমাকে ব্যাখ্যা করতে পারেন যা আচ্ছাদিত নয়?
বাবলো

4
দয়া করে আমার উত্তরটি যাচাই করুন, আপনি যে বিক্রয় আগে শুরু করেছিলেন তা কভার করেন নি start_dateতবে start_dateএবং এর মধ্যে শেষ হয়েছিল end_date। অন্যদিকে, প্রশ্নটি যথাযথভাবে পরিষ্কার নয়, আমার অনুমান, আমাদের দেওয়া কোনও তারিখ বা তারিখের মধ্যে আংশিকভাবে তারিখের সীমা অন্তর্ভুক্ত হওয়া তারিখগুলির মধ্যে কঠোরভাবে বিক্রয় নেওয়া উচিত কিনা তা আমাদের কোনও ধারণা নেই, তবে একদিকে বা অন্যদিকে বা উভয়ই প্রসারিত হতে পারে? সুতরাং মূল সমস্যাটি প্রশ্নটি পরিষ্কার না হওয়া সম্পর্কে আমার ধারণা।
ফ্যালানএঞ্জেল

আমি জানি এই পোস্টটি পুরানো তবে যারা পড়ছেন তাদের জন্য: এটি তারিখের মধ্যে নয় তবে তারিখগুলি সহ অন্তর্ভুক্ত। থেকে এবং থেকে।
কেন

24
SELECT * FROM Product_sales 
WHERE From_date between '2013-01-03'
AND '2013-01-09'

আপনার নির্বাচনটি ভুল_১ তারিখ: ২০১২-১২-৩০ থেকে To_Date: 2013-01-05 পর্যন্ত ভুল হবে। এই তারিখগুলি আকাঙ্ক্ষিত সীমার ভিতরে কিন্তু আপনার SQL এর যে ফেরত পাঠানো হবে না কারণ তারা শুরু হয় আগে পরিসীমা, কিন্তু তারা শেষ ভিতরে পরিসীমা।
নেটভিউস

5
SELECT *
FROM Product_sales
WHERE (
From_date >= '2013-08-19'
AND To_date <= '2013-08-23'
)
OR (
To_date >= '2013-08-19'
AND From_date <= '2013-08-23'
)

4
অন্তর্ভুক্ত ছেদ করার জন্য আপনি যখন_ডেটটি শুরুর আগে এবং টু ডেট শেষ হওয়ার পরে তা ধরার জন্য আপনি আরও একটি বা শৃঙ্খলা যুক্ত করতে চান: বা (টো_ডেট <= '2013-08-19' এবং থেকে_ তারিখ> = '2013-08- 23 ')
ঝাড়ব্যাক

5

এটি আপনি অনুসন্ধান করছেন এমন সমস্ত শর্ত জুড়ে।

SELECT * from Product_sales where (From_date <= '2013-01-09' AND To_date >= '2013-01-01')

4

চেষ্টা করুন:

DECLARE @FrmDt DATETIME, @ToDt DATETIME
SELECT @FrmDt='2013-01-03', @ToDt='2013-01-09'

SELECT * 
FROM Product_sales 
WHERE (@FrmDt BETWEEN From_date AND To_date) OR 
    (@ToDt BETWEEN From_date AND To_date)

3

কেবল আমার 2 সেন্ট, আমি ডিবি সার্ভার হিসাবে "ডিডি-এমএমএম-ইয়াই" ফর্ম্যাটটি সবচেয়ে নিরাপদভাবে ব্যবহার করে জানি যে সার্ভারের আঞ্চলিক সেটিংস নির্বিশেষে আপনি কী চান তা জানতে পারবেন। অন্যথায় আপনি সম্ভবত কোনও সার্ভারে ইস্যু-ডিডি-মিমি হিসাবে তার তারিখের আঞ্চলিক সেটিংস (যে কোনও কারণে) সমস্যার সমাধান করতে পারেন

এইভাবে:

SELECT * FROM Product_sales 
WHERE From_date >= '03-Jan-2013'
AND To_date <= '09-Jan-2013'

এটি আমার জন্য সর্বদা ভাল কাজ করেছে ;-)


3

এটি এসকিউএলএস সার্ভার_2008 আর 2 এ কাজ করছে

Select * 
from Product_sales
where From_date 
between '2013-01-03' and '2013-01-09'


2

এই কোয়েরিটি পরীক্ষা করে দেখুন, কোনও সংরক্ষণাগারের তারিখের সাথে চেক শেষ হয়ে গেছে কিনা তা পরীক্ষা করতে আমি এই ক্যোয়ারী তৈরি করেছি

SELECT * FROM tbl_ReservedRooms
WHERE NOT ('@checkindate' NOT BETWEEN fromdate AND todate
  AND '@checkoutdate'  NOT BETWEEN fromdate AND todate)

এটি ওভারল্যাপিংয়ের বিশদটি পুনরায় চালু করবে, না ওভারল্যাপিংয়ের বিশদটি পেতে তারপরে কোয়েরি থেকে 'না' মুছে ফেলবে


2

এই ক্যোয়ারী আপনাকে সহায়তা করবে:

select * 
from XXXX
where datepart(YYYY,create_date)>=2013 
and DATEPART(YYYY,create_date)<=2014

1
SELECT NULL  
    FROM   HRMTable hm(NOLOCK)  
    WHERE  hm.EmployeeID = 123
        AND (  
                (  
                    CAST(@Fromdate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                )  
                OR (  
                    CAST(@Todate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                   )  
                ) 
         )

1

আপনি নিম্নলিখিত টুকরোগুলি ব্যবহার করে দেখতে পারেন:

select  * from  Product_sales 
where  From_date  >= '2013-01-03' and game_date  <= '2013-01-09'

1

এটি সহজ, দুটি তারিখের মধ্যে তারিখের পরিসীমা থেকে নির্বাচন করা ডেটা খুঁজতে এই ক্যোয়ারীটি ব্যবহার করুন

select * from tabblename WHERE (datecolumn BETWEEN '2018-04-01' AND '2018-04-5')

0

সংখ্যার মানগুলি যেমন তুলনা করেন ঠিক তেমনভাবে আপনার বর্গক্ষেত্রে তারিখগুলি তুলনা করা উচিত

SELECT * FROM Product_sales
WHERE From_date >= '2013-01-01' AND To_date <= '2013-01-20'

0

আগস্ট মাসে চলমান সমস্ত পণ্য বিক্রয় সন্ধানের জন্য এখানে একটি অনুসন্ধান রয়েছে is

  • পণ্য_সেলগুলি সন্ধান করুন আগস্ট মাসে সক্রিয় ছিল
  • আগস্টের শেষের আগে শুরু হওয়া যে কোনও কিছু অন্তর্ভুক্ত করুন
  • ১ লা আগস্টের আগে শেষ হওয়া কোনও কিছু বাদ দিন

কোয়েরিটি বৈধ করার জন্য কেস স্টেটমেন্ট যুক্ত করে

SELECT start_date, 
       end_date, 
       CASE 
         WHEN start_date <= '2015-08-31' THEN 'true' 
         ELSE 'false' 
       END AS started_before_end_of_month, 
       CASE 
         WHEN NOT end_date <= '2015-08-01' THEN 'true' 
         ELSE 'false' 
       END AS did_not_end_before_begining_of_month 
FROM   product_sales 
WHERE  start_date <= '2015-08-31' 
       AND end_date >= '2015-08-01' 
ORDER  BY start_date; 

0
DECLARE @monthfrom int=null,
@yearfrom int=null,
@monthto int=null,
@yearto int=null,
@firstdate DATE=null,
@lastdate DATE=null

SELECT @firstdate=DATEADD(month,@monthfrom-1,DATEADD(year,@yearfrom-1900,0)) /*Setting First Date using From Month & Year*/
SELECT @lastdate= DATEADD(day,-1,DATEADD(month,@monthto,DATEADD(year,@yearto-1900,0)))/*Setting Last Date using From Month & Year*/

SELECT *  FROM tbl_Record
WHERE  (DATEADD(yy, Year - 1900, DATEADD(m, Month - 1, 1 - 1)) BETWEEN CONVERT(DATETIME, @firstdate, 102) AND 
CONVERT(DATETIME, @lastdate, 102))

-1

এটি সহজ, আপনি যা চান তা পেতে এই ক্যোয়ারীটি ব্যবহার করুন।

select * from Product_Sales where From_date<='2018-04-11' and To_date>='2018-04-11'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.