मैं एक प्रश्न लिख रहा हूं जिसमें मुझे केवल पिछले वर्ष के लिए डेटा प्राप्त करना है। इसे करने का बेहतरीन तरीका क्या है?एसक्यूएल सर्वर: केवल पिछले वर्ष के लिए डेटा प्राप्त करें
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
मैं एक प्रश्न लिख रहा हूं जिसमें मुझे केवल पिछले वर्ष के लिए डेटा प्राप्त करना है। इसे करने का बेहतरीन तरीका क्या है?एसक्यूएल सर्वर: केवल पिछले वर्ष के लिए डेटा प्राप्त करें
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
निम्नलिखित कहते हैं -1 वर्तमान दिनांक के वर्ष:
SELECT ... From ... WHERE date > DATEADD(year,-1,GETDATE())
dateadd(yy,-1,getdate())
GETDATE बोल में DATEADD खोजें() आज की तारीख और समय देता है।
तो पिछले साल (मूल उदाहरण की तरह) आप की तरह कुछ का उपयोग करना चाहिए वर्तमान दिन पिछले साल की आधी रात में शुरू होता है:
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
ठीक है, मुझे लगता है कि कुछ यहाँ याद आ रही है। उपयोगकर्ता पिछले साल से डेटा प्राप्त करना चाहता है, न कि पिछले 365 दिनों से। एक बड़ी दुविधा है। मेरी राय में, पिछले साल से डेटा 2007 से हर डेटा है (अगर मैं अब 2008 में हूं)। तो सही जवाब होगा:
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE) - 1
तो फिर, अगर आप इस क्वेरी को प्रतिबंधित करना चाहते हैं, तो आप कुछ अन्य फिल्टर IMO जोड़ सकते हैं, लेकिन हमेशा पिछले साल
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE) - 1 AND DATE > '05/05/2007'
यह बड़ी तालिकाओं पर बहुत खराब प्रदर्शन करेगा, आप तारीख के साल के मूल्य का मूल्यांकन करने के लिए प्रत्येक रिकॉर्ड पर लूप करेंगे, –
सबसे पठनीय में खोज, :
SELECT * FROM TABLE WHERE Date >
DATEADD(yy, -1, CONVERT(datetime, CONVERT(varchar, GETDATE(), 101)))
कौन सा:
है DateDiff और साथ वेरिएंट DATEADD आपको आज के मध्यरात्रि प्राप्त करने के लिए, लेकिन वे बल्कि उलझन में हैं (हालांकि प्रदर्शन पर थोड़ा बेहतर है - यह नहीं कि आप डेटा लाने के लिए आवश्यक पढ़ने की तुलना में नोटिस करेंगे)।
यदि आपके पास "केवल SQL" है तो अन्य सुझाव अच्छे हैं।
हालांकि मैं सुझाव देता हूं कि यदि संभव हो तो - आप अपने प्रोग्राम की तारीख की गणना करते हैं और इसे SQL क्वेरी में स्ट्रिंग के रूप में डालें।
कम से कम बड़ी तालिकाओं के लिए (यानी कई मिलियन पंक्तियां, शायद जुड़ने के साथ मिलकर) जो आपको काफी गति सुधार देगी क्योंकि अनुकूलक उतना बेहतर काम कर सकता है।DATEADD समारोह के लिए
दिनांक सीमा का उपयोग करना बेहतर होगा यदि आप पैरामीटरयुक्त स्ट्रिंग बनाते हैं तो बेहतर होगा और मूल्य को स्ट्रिंग में रखने से बचें ... –
तर्क:
DATEADD (*datepart* , *number* , *date*)
DatePart हो सकता है: yy, qq, मिमी, उप, dd, hh, DW, सप्ताह, मील, एस एस, एमएस
संख्या एक अभिव्यक्ति है जिसे किसी दिनांक को
दिनांक एक अभिव्यक्ति है जिसे एक समय, तिथि, smalldatetime, डेटाटाइम, डेटाटाइम 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
यह प्रश्न का समाधान नहीं करता है। –
इसके अलावा, जबकि लूप आमतौर पर SQL – StingyJack
मुझे इस पृष्ठ को एक समाधान की तलाश करते हुए मिला जो मुझे पिछले कैलेंडर वर्ष से परिणामों का चयन करने में मदद करेगा। ऊपर दिखाए गए अधिकांश परिणाम पिछले 365 दिनों से वापसी आइटम लगता है, जो मेरे लिए काम नहीं करता है।
साथ ही, मुझे निम्नलिखित कोड में मेरी ज़रूरतों को हल करने के लिए पर्याप्त दिशा दी गई - जिसे मैं यहां किसी अन्य व्यक्ति के लिए पोस्ट कर रहा हूं जिसकी मेरी आवश्यकता है और जो इस पृष्ठ पर इस पृष्ठ पर आ सकता है एक तरकीब।
SELECT .... FROM .... WHERE year(*your date column*) = year(DATEADD(year,-1,getdate()))
उन लोगों के लिए धन्यवाद जिनके समाधानों ने मुझे जो चाहिए वह पहुंचने में मेरी सहायता की।
कहां तारीख> DATE_SUB (NOW(), अंतराल 1 वर्ष)
यह आपको एक प्रश्न है कि डेटा के 1 वर्ष खींच लेंगे जब भी आप इसे चलाने दे देंगे।
के लिए खराब हैं, प्रश्न Microsoft SQL सर्वर के लिए है जो न तो 'date_sub' फ़ंक्शन और न ही' अंतराल 'निर्माण का उपयोग करता है। – jpw
मैं, @ डी.ई. की तरह। सफेद, मूल प्रश्न की तुलना में समान लेकिन अलग-अलग कारणों के लिए यहां आया था। मूल प्रश्न पिछले 365 दिनों के लिए पूछता है। @ samjudson का जवाब यह प्रदान करता है। @डे। व्हाइट का जवाब पिछले कैलेंडर वर्ष के परिणाम देता है। फ़र, 17, 2017 इस क्वेरी से परिणाम पर
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
उदाहरण के लिए,:
मेरे क्वेरी थोड़ी अलग है कि यह करने के लिए और सहित आज की तारीख तक पूर्व वर्ष के लिए काम करता है 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())
तुम्हारा क्लीनर है, लेकिन यहाँ मैं क्या था: वर्ष (GETDATE()) - 1 – PCPGMR
यह आपको एक नंबर देता है, एक तिथि नहीं, आप उस तारीख के वर्ष की गणना किए बिना उस तारीख की तुलना किसी भी तारीख से नहीं कर सके। इसके बाद 31 दिसंबर 2014 बनाम 1 जनवरी 2015 के लिए गलत परिणाम लौटाए जाएंगे - जो अलग-अलग वर्षों में हैं, लेकिन एक साल अलग नहीं हैं ... – samjudson
सही। मुझे सालाना संख्या सालाना तुलना करने की ज़रूरत है, इसलिए 2013 से 2014 तक उदाहरण के लिए केवल वर्ष में आने वाला डेटा था। मैं अपनी टिप्पणी में स्पष्ट नहीं था। धन्यवाद – PCPGMR