আমি একটি ক্যোয়ারী লিখছি যেখানে আমাকে কেবল গত বছরের জন্য ডেটা পেতে হবে। এই কাজ করতে সবচেয়ে ভালো উপায় কি?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
উত্তর:
নিম্নলিখিতটি বর্তমান তারিখে -1 বছর যোগ করে:
SELECT ... From ... WHERE date > DATEADD(year,-1,GETDATE())
কোনও পূর্ববর্তী ক্যালেন্ডার বছর থেকে ফলাফল নির্বাচন করতে আমাকে সহায়তা করতে পারে এমন কোনও সমাধান খুঁজতে গিয়ে আমি এই পৃষ্ঠাটি পেয়েছি। উপরে প্রদর্শিত বেশিরভাগ ফলাফলগুলি গত 365 দিনের রিটার্ন আইটেমগুলি বলে মনে হচ্ছে, যা আমার পক্ষে কার্যকর হয়নি।
একই সময়ে, এটি আমাকে নীচের কোডটিতে আমার প্রয়োজনীয়তাগুলি সমাধান করার জন্য যথেষ্ট দিকনির্দেশনা দিয়েছে - যা আমি আমার মতো একই চাহিদাযুক্ত এবং সমাধানের সন্ধানে এই পৃষ্ঠাটি জুড়ে আসতে পারে এমন অন্য কোনও ব্যক্তির জন্য এখানে পোস্ট করছি।
SELECT .... FROM .... WHERE year(*your date column*) = year(DATEADD(year,-1,getdate()))
যাদের উপরের সমাধানগুলি আমার প্রয়োজনীয় জিনিসগুলি পৌঁছাতে সহায়তা করেছে তাদের উপরে ধন্যবাদ জানাই।
ঠিক আছে, আমি মনে করি এখানে কিছু অনুপস্থিত। ব্যবহারকারী গত 365 দিন থেকে নয়, গত বছর থেকে ডেটা পেতে চায়। একটি বিশাল দ্বিধা আছে। আমার মতে, গত বছর থেকে প্রাপ্ত তথ্য 2007 এর প্রতিটি ডেটা (যদি আমি এখন ২০০৮ এ থাকি)। সুতরাং সঠিক উত্তর হবে:
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1
তারপরে আপনি যদি এই ক্যোয়ারিকে সীমাবদ্ধ রাখতে চান তবে আপনি কিছু অন্যান্য ফিল্টার যুক্ত করতে পারেন তবে সর্বদা সর্বশেষ বছরের অনুসন্ধানে।
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1 AND DATE > '05/05/2007'
বিএল-এ তারিখটি সন্ধান করুন
dateadd(yy,-1,getdate())
সর্বাধিক পঠনযোগ্য, আইএমও:
SELECT * FROM TABLE WHERE Date >
DATEADD(yy, -1, CONVERT(datetime, CONVERT(varchar, GETDATE(), 101)))
যা:
আপনাকে আজকের মধ্যরাত পেতে DATEDIFF এবং DATEADD এর সাথে বৈকল্পিক রয়েছে, তবে তারা বরং অভ্যাসের দিকে ঝুঁকছে (পারফরম্যান্সে কিছুটা ভাল - যদিও আপনি তথ্য আনতে প্রয়োজনীয় পাঠকদের তুলনায় লক্ষ্য করবেন না)।
GETDATE()
বর্তমান তারিখ এবং সময় প্রদান করে ।
গত বছর যদি চলতি দিনের মধ্যরাতে গত বছরের শুরু হয় (মূল উদাহরণের মতো) আপনার এমন কিছু ব্যবহার করা উচিত:
DECLARE @start datetime
SET @start = dbo.getdatewithouttime(DATEADD(year, -1, GETDATE())) -- cut time (hours, minutes, ect.) -- getdatewithouttime() function doesn't exist in MS SQL -- you have to write one
SELECT column1, column2, ..., columnN FROM table WHERE date >= @start
অন্যান্য পরামর্শগুলি আপনার কাছে "কেবলমাত্র এসকিউএল" থাকলে ভাল।
তবে আমি প্রস্তাব দিই, এটি - যদি সম্ভব হয় - আপনি আপনার প্রোগ্রামের তারিখটি গণনা করুন এবং এসকিউএল কোয়েরিতে স্ট্রিং হিসাবে এটি .োকান।
কমপক্ষে বড় টেবিলের জন্য (অর্থাত্ কয়েক মিলিয়ন সারি, সম্ভবত এতে যোগ দেয়) যা আপনাকে যথেষ্ট গতির উন্নতি দেয় কারণ অপটিমাইজার আরও ভালর সাথে কাজ করতে পারে।
DATEADD ফাংশনের পক্ষে যুক্তি:
DATEADD (*datepart* , *number* , *date* )
ডেট পার্টটি হতে পারে: yy, qq , mm, dy, dd, wk, dw, hh, mi, ss, ms
সংখ্যা এমন একটি অভিব্যক্তি যা কোনও ডেট পার্টের সাথে তারিখের অংশে যুক্ত হওয়া কোনও সমাধান করা যায়
তারিখটি এমন একটি অভিব্যক্তি যা কোনও সময়, তারিখ, ছোট তারিখ, তারিখ সময়, তারিখটাইম 2, বা ডেটটাইমসেট মানকে সমাধান করা যায়।
declare @iMonth int
declare @sYear varchar(4)
declare @sMonth varchar(2)
set @iMonth = 0
while @iMonth > -12
begin
set @sYear = year(DATEADD(month,@iMonth,GETDATE()))
set @sMonth = right('0'+cast(month(DATEADD(month,@iMonth,GETDATE())) as varchar(2)),2)
select @sYear + @sMonth
set @iMonth = @iMonth - 1
end
আমি, @ ডিআই হোয়াইটের মতো, মূল প্রশ্নের তুলনায় একই রকম তবে ভিন্ন কারণে এখানে এসেছি। আসল প্রশ্নটি সর্বশেষ ৩5৫ দিনের জন্য জিজ্ঞাসা করে। @ সামজডসনের উত্তর এটি সরবরাহ করে। @ ডি হোয়াইট এর উত্তর পূর্ববর্তী ক্যালেন্ডার বছরের ফলাফল দেয়।
আমার জিজ্ঞাসাটি কিছুটা আলাদা যে এটি এর জন্য কাজ করে পূর্ববর্তী বছরের জন্য বর্তমান তারিখ পর্যন্ত কাজ করে:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
উদাহরণস্বরূপ, ফেব্রুয়ারী 17, 2017 এ এই ক্যোয়ারী 1/1/2016 থেকে ২/১/201/২০১ results তারিখের ফলাফল দেয়
আমার একইরকম সমস্যা ছিল তবে পূর্ববর্তী কোডারটি কেবলমাত্র মিমি-ইয়ে ফর্মেটে তারিখটি দিয়েছিল। আমার সমাধানটি সহজ তবে এটি কারওর পক্ষে সহায়ক প্রমাণিত হতে পারে (আমি নিশ্চিত হতে চেয়েছিলাম যে শুরু এবং শেষের স্থানগুলি অপসারণ করা হয়েছিল):
SELECT ... FROM ....WHERE
CONVERT(datetime,REPLACE(LEFT(LTRIM([MoYr]),2),'-
','')+'/01/'+RIGHT(RTRIM([MoYr]),4)) >= DATEADD(year,-1,GETDATE())