sql - দুই তারিখের মধ্যে তারিখ নির্বাচন করতে এসকিউএল ক্যোয়ারী




sql-server tsql (13)

24 ঘণ্টার মধ্যে যদি তার তারিখ এবং সকালে শুরু হয় এবং রাতে শেষের মতো কিছু যোগ করা উচিত:

declare @Approval_date datetime
set @Approval_date =getdate()
Approval_date between @Approval_date +' 00:00:00.000' and @Approval_date +' 23:59:59.999'

আমার একটি start_date এবং end_date । আমি এই দুটি তারিখের মধ্যে তারিখ তালিকা পেতে চান। যে কেউ আমাকে আমার প্রশ্নের মধ্যে ভুল নির্দেশ করে সাহায্য করতে পারেন।

select Date,TotalAllowance 
from Calculation 
where EmployeeId=1
  and Date between 2011/02/25 and 2011/02/27

এখানে Date একটি datetime পরিবর্তনশীল।


আপনি এই এসকিউএল চেষ্টা করুন

select * from employee where rec_date between '2017-09-01' and '2017-09-11' 

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

qry = "SELECT * FROM [calender] WHERE datediff(day,'" & dt & "',[date])>=0 and datediff(day,'" & dt2 & "',[date])<=0 "

এখানে ক্যালেন্ডার হল টেবিল, ডিটি শুরু তারিখ হিসাবে পরিবর্তনশীল এবং dt2 শেষ তারিখ পরিবর্তনশীল।


আমি জন্য যেতে হবে

select Date,TotalAllowance from Calculation where EmployeeId=1
             and Date >= '2011/02/25' and Date < DATEADD(d, 1, '2011/02/27')

যুক্তি হচ্ছে যে >= সম্পূর্ণ শুরুর তারিখ অন্তর্ভুক্ত করে এবং < শেষ তারিখ বাদ দেয়, তাই আমরা শেষ তারিখটিতে এক ইউনিট যোগ করি। এই উদাহরণস্বরূপ, মাস ধরে অভিযোজিত করতে পারেন:

select Date, ... from ...
             where Date >= $start_month_day_1 and Date < DATEADD(m, 1, $end_month_day_1)

উদাহরণস্বরূপ # # এর মধ্যে তারিখগুলি স্থাপন করার চেষ্টা করুন:

#2013/4/4# and #2013/4/20#

এটা আমার জন্য কাজ করে।

--- সম্পাদনা --- আমি একটি বিজ্ঞপ্তি পেয়েছি যে আমি দুটি খ্যাতি পয়েন্ট হারিয়েছি কারন কেউ এই উত্তরটিকে ভোট দিয়েছে। অনুগ্রহ করে, উত্তরটি যদি আপনার জন্য কাজ না করে তবে ডাউন-ভোট করবেন না। মন্তব্যের জন্য আরও তথ্য / সাহায্যের জন্য জিজ্ঞাসা করুন, অথবা অন্যান্য সমাধান পরীক্ষা করুন।

আমি খ্যাতি পয়েন্ট সম্পর্কে উদ্বিগ্ন না - আমি কেবল বলি যে ডাউন-ভোটগুলি এর জন্য তৈরি করা হয় না।


উদাহরণস্বরূপ পরীক্ষা করুন: কাজ এবং নন-ওয়ার্কিং উভয়।

select * from tblUser Where    
convert(varchar(10),CreatedDate,111) between '2015/04/01' and '2016/04/01' //--**Working**

অথবা

select * from tblUser Where
(CAST(CreatedDate AS DATETIME) between CAST('2015/04/01' AS DATETIME) And CAST('2016/4/30'AS DATETIME)) //--**Working**

অথবা

select * from tblUser Where
(YEAR(CreatedDate) between YEAR('2015/04/01') And YEAR('2016/4/30')) 
//--**Working**

এবং নীচে কাজ করছে না:

select * from tblUser Where
Convert(Varchar(10),CreatedDate,111) >=  Convert(Varchar(10),'01-01-2015',111) and  Convert(Varchar(10),CreatedDate,111) <= Convert(Varchar(10),'31-12-2015',111) //--**Not Working**


select * from tblUser Where
(Convert(Varchar(10),CreatedDate,111) between Convert(Varchar(10),'01-01-2015',111) And Convert(Varchar(10),'31-12-2015',111)) //--**Not Working**

এটা চেষ্টা কর:

select Date,TotalAllowance from Calculation where EmployeeId=1
             and [Date] between '2011/02/25' and '2011/02/27'

তারিখ মান স্ট্রিং হিসাবে টাইপ করা প্রয়োজন।

SQL সার্ভার 2008 এবং উচ্চতর জন্য আপনার প্রশ্নের ভবিষ্যত-প্রমাণীকরণ নিশ্চিত করার জন্য, Date উচিত কারণ এটি পরে সংস্করণগুলিতে একটি সংরক্ষিত শব্দ।

মনে রাখবেন যে তারিখগুলি মধ্যরাতের সময়গুলি ডিফল্ট হিসাবে গ্রহণ করে, তাই আপনার কাছে সঠিক মান নেই।


এটা ভাল ভাবে লিখুন:

CREATE PROCEDURE dbo.Get_Data_By_Dates
(
    @EmployeeId INT = 1,
    @Start_Date DATE,
    @End_Date Date
)
AS
Select * FROM Calculation  
    where EmployeeId[email protected]EmployeeId AND Test_Date BETWEEN @Start_Date AND @End_Date
RETURN

বর্তমান তারিখ এবং তিন দিনের মধ্যে নির্বাচিত তারিখের জন্য সেরা ক্যোয়ারী:

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN       
DATE_SUB(CURDATE(), INTERVAL 3 DAY)  AND CURDATE() 

বর্তমান তারিখ এবং পরবর্তী তিন দিনের মধ্যে নির্বাচিত তারিখের জন্য সেরা ক্যোয়ারী:

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN   
   CURDATE()  AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)   

যেহেতু একটি নির্ধারিত সময়ের সেগমেন্ট ছাড়াই একটি ডেটাটাইম date 00:00:00.000 একটি মান হবে date 00:00:00.000 , যদি আপনি নিশ্চিত হন যে আপনি আপনার পরিসরের সমস্ত তারিখগুলি পেতে চান তবে আপনাকে অবশ্যই আপনার শেষ তারিখের জন্য সময় সরবরাহ করতে হবে অথবা আপনার শেষ তারিখটি বাড়ানো হবে এবং < ব্যবহার।

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date between '2011/02/25' and '2011/02/27 23:59:59.999'

অথবা

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date >= '2011/02/25' and Date < '2011/02/28'

অথবা

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date >= '2011/02/25' and Date <= '2011/02/27 23:59:59.999'

নিম্নলিখিতগুলি ব্যবহার করবেন না, কারণ এটি ২011/0২/28 থেকে কিছু রেকর্ড ফেরত দিতে পারে যদি তাদের সময় 00: 00: 00,000।

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date between '2011/02/25' and '2011/02/28'

Select 
    * 
from 
    Calculation 
where 
    EmployeeId=1 and Date between #2011/02/25# and #2011/02/27#;

select * from table_name where col_Date between '2011/02/25' 
AND DATEADD(s,-1,DATEADD(d,1,'2011/02/27'))

এখানে, বর্তমান শেষ দিনটিতে প্রথম দিনটি যোগ করুন, এটি 2011-02-28 00:00:00 , তারপর আপনি শেষ তারিখ 2011-02-27 23:59:59 করতে এক সেকেন্ড বিয়োগ করুন। এই কাজ করে, আপনি প্রদত্ত অন্তর মধ্যে সব তারিখ পেতে পারেন।

output:
2011/02/25
2011/02/26
2011/02/27

select Date,TotalAllowance 
from Calculation 
where EmployeeId=1
  and convert(varchar(10),Date,111) between '2011/02/25' and '2011/02/27'







sql-server-2005