जवाबों:
निम्नलिखित वर्तमान तिथि में -1 वर्ष जोड़ता है:
SELECT ... From ... WHERE date > DATEADD(year,-1,GETDATE())
मुझे यह पृष्ठ एक समाधान की तलाश में मिला जो मुझे एक पूर्व कैलेंडर वर्ष से परिणाम चुनने में मदद करेगा। ऊपर दिखाए गए अधिकांश परिणाम पिछले 365 दिनों के रिटर्न आइटम लगते हैं, जो मेरे लिए काम नहीं करते थे।
उसी समय, इसने मुझे निम्नलिखित कोड में अपनी आवश्यकताओं को हल करने के लिए पर्याप्त दिशा दी - जो मैं यहां उन अन्य लोगों के लिए पोस्ट कर रहा हूं जिन्हें मेरी जैसी ही आवश्यकता है और जो समाधान खोजने के लिए इस पृष्ठ पर आ सकते हैं।
SELECT .... FROM .... WHERE year(*your date column*) = year(DATEADD(year,-1,getdate()))
ऊपर उन लोगों के लिए धन्यवाद जिनके समाधान ने मुझे मेरी ज़रूरत पर पहुंचने में मदद की।
खैर, मुझे लगता है कि यहां कुछ याद आ रहा है। उपयोगकर्ता पिछले वर्ष से डेटा प्राप्त करना चाहता है न कि पिछले 365 दिनों से। बहुत बड़ा अंतर है। मेरी राय में, पिछले वर्ष का डेटा 2007 से प्रत्येक डेटा है (यदि मैं अभी 2008 में हूं)। तो सही उत्तर होगा:
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1
फिर यदि आप इस क्वेरी को प्रतिबंधित करना चाहते हैं, तो आप कुछ अन्य फ़िल्टर जोड़ सकते हैं, लेकिन हमेशा अंतिम वर्ष में खोज करना।
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1 AND DATE > '05/05/2007'
सबसे पठनीय, IMO:
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
अन्य सुझाव अच्छे हैं यदि आपके पास "केवल SQL" है।
हालाँकि, मेरा सुझाव है कि, यदि संभव हो - आप अपने कार्यक्रम में तारीख की गणना करें और इसे एसक्यूएल क्वेरी में स्ट्रिंग के रूप में डालें।
कम से कम बड़ी तालिकाओं के लिए (यानी कई मिलियन पंक्तियाँ, शायद जोड़ के साथ) जो आपको काफी गति में सुधार देगी क्योंकि आशावादी उतना बेहतर काम कर सकता है।
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
I, @DE व्हाइट की तरह, मूल प्रश्न की तुलना में इसी तरह के विभिन्न कारणों के लिए यहां आया था। मूल प्रश्न पिछले 365 दिनों का है। @ samjudson का उत्तर यह प्रदान करता है। @DE व्हाइट का उत्तर पूर्व कैलेंडर वर्ष के लिए रिटर्न परिणाम है।
मेरी क्वेरी थोड़ी अलग है कि यह चालू वर्ष के लिए और वर्तमान तिथि को शामिल करने के लिए काम करती है :
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
उदाहरण के लिए, 17 फरवरी, 2017 को यह क्वेरी 1/1/2016 से 2/17/2017 तक परिणाम देती है
मुझे एक समान समस्या थी लेकिन पिछले कोडर ने केवल मिमी-य्यी प्रारूप में तारीख प्रदान की। मेरा समाधान सरल है, लेकिन कुछ के लिए मददगार साबित हो सकता है (मैं यह भी सुनिश्चित करना चाहता था कि शुरुआत और रिक्त स्थान समाप्त हो गए):
SELECT ... FROM ....WHERE
CONVERT(datetime,REPLACE(LEFT(LTRIM([MoYr]),2),'-
','')+'/01/'+RIGHT(RTRIM([MoYr]),4)) >= DATEADD(year,-1,GETDATE())