वर्तमान वर्ष की पहली और अंतिम तिथि कैसे प्राप्त करें?


110

SQL Server 2000 का उपयोग करके, मैं वर्तमान वर्ष की पहली और अंतिम तिथि कैसे प्राप्त कर सकता हूं?

अपेक्षित उत्पादन:

01/01/2012 तथा 31/12/2012

जवाबों:


237
SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

उपरोक्त क्वेरी 31 दिसंबर की शुरुआत में मध्यरात्रि के लिए एक डेटटाइम मान देती है। यह वर्ष के अंतिम क्षण से लगभग 24 घंटे कम है। यदि आप 31 दिसंबर को होने वाले समय को शामिल करना चाहते हैं, तो आपको अगले साल की पहली तुलना तुलना के साथ करनी चाहिए <। या आप वर्तमान वर्ष के अंतिम कुछ मिलीसेकेंड से तुलना कर सकते हैं, लेकिन यह अभी भी एक अंतर छोड़ देता है यदि आप DATETIME के ​​अलावा कुछ का उपयोग कर रहे हैं (जैसे DATETIME2):

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
   DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear

टेक विवरण

यह 1900 के बाद के वर्षों की संख्या का पता DATEDIFF(yy, 0, GETDATE())लगाकर काम करता है और फिर शून्य = 1 जनवरी, 1900 की तारीख में जोड़ देता है। यह कार्य को मनमाने ढंग से करने के लिए GETDATE()भाग की जगह या मनमाना वर्ष बदलकर DATEDIFF(...)कार्य के साथ बदल सकता है। "वर्ष - 1900।"

 SELECT
   DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
   DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015

13

यहाँ एक काफी सरल तरीका है;

SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';

यह सेक्सी नहीं है, लेकिन यह काम करता है।


1
केवल Sql सर्वर 2012 से उपलब्ध है।
लुकास

12

आप DATEPARTफ़ंक्शन का उपयोग करके वर्तमान वर्ष प्राप्त कर सकते हैं , वर्तमान तिथि का उपयोग करके प्राप्त कर सकते हैंgetUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))

1
यह तार आउटपुट करता है, दिनांक नहीं। यदि ऐसा है तो आपको वास्तव में जरूरत है, हाँ, लेकिन यदि आप या तो उपयोग कर सकते हैं, तो तारीखों को तारीखों के रूप में रखें, और उन्हें तार के रूप में उपयोग न करें।
जेमी एफ

2
मैं असहमत हूं, ओपी ने निर्दिष्ट नहीं किया और sql सर्वर में सेट किया गया डेटा फॉर्मेट '01 / 01/2012 'के बजाय' 2012-01-01 12:13:14 'की तरह वापस आ सकता है
RandyMorris

1
@RandyMorris, सहमत, ओपी पूछ रहा था कि क्या वह DATETIMEस्ट्रिंग के बजाय प्राप्त कर सकता है और जाहिर है कि सवाल के अनुसार अपेक्षित आउटपुट से मेल नहीं खा सकता है।
विकडॉर

1
आप अस्पष्ट तिथि प्रारूप का उपयोग क्यों करेंगे (और आपके उत्तर के तार आपकी टिप्पणी के प्रारूप से मेल नहीं खाते)? yyyyMMddअसंदिग्ध है।
डेमियन_इन_यूएनबेलिवर

1
@Damien_The_Unbeliever, प्रतिक्रिया में क्वेरी प्रश्न के अनुसार अपेक्षित आउटपुट से मेल खाती है। DATETIME के ​​बारे में टिप्पणी, ओपी की टिप्पणी के बजाय स्ट्रिंग के बजाय तारीख प्राप्त करने की प्रतिक्रिया है। उत्तर इस चर्चा को प्रतिबिंबित नहीं करता है।
विकदोर

7

बस लिखें: -

select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))

वर्ष की आरंभ तिथि।

select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))  

4

प्रत्येक वर्ष में पहली तारीख के रूप में 1 सेंट और अंतिम तिथि के रूप में 31 है जो आपको करना है केवल वर्ष को उस दिन और महीने के लिए संलग्न करें: -

 SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
 '12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]


क्या कोई उदाहरण देगा कि यह कब काम नहीं करेगा?
slayernoah

@slayernoah सर्वर की स्थानीयकरण सेटिंग्स के आधार पर, मुझे लगता है कि यह कभी-कभी एक त्रुटि उत्पन्न करेगा।
जेमी एफ

3

वर्ष का पहला और अंतिम दिन प्राप्त करने के लिए, कोई CONCATफ़ंक्शन का उपयोग कर सकता है । परिणामी मूल्य किसी भी प्रकार का हो सकता है।

CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear

वर्ष मेरे लिए काम नहीं करता है, लेकिन date_part कार्य start_year_date: = CONCAT (date_part ('Y', start_date_p) :: int :: text, '- 01-01') :: दिनांक;
बरमैट

1

वर्तमान वर्ष की शुरुआत की तारीख के लिए:

SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())

वर्तमान वर्ष की अंतिम तिथि के लिए:

SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))

1

दूसरा तरीका: (SQL सर्वर 2012 के बाद से)

SELECT
    DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
    DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay

0

इसे देखें:

select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear,
       convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear


0
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)

आपको अपना कोड समझाना चाहिए। कोड डंप को अक्सर डाउनवोट किया जाता है और हटाया जा सकता है।
बग्स

0

ऐसा लगता है कि आप दिए गए वर्ष के लिए सब कुछ एक ऑपरेशन करने में दिलचस्प हैं, अगर यह वास्तव में मामला है, तो मैं इस तरह YEAR () फ़ंक्शन का उपयोग करने की सिफारिश करूंगा :

SELECT * FROM `table` WHERE YEAR(date_column) = '2012';

वही DAY () और MONTH () के लिए जाता है । वे MySQL / MariaDB वेरिएंट के लिए भी उपलब्ध हैं और इसे SQL Server 2008 में प्रस्तुत किया गया था (इसलिए विशिष्ट 2000 के लिए नहीं)।


-1
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') 
from dual

यह पीएल-एसक्यूएल के लिए है, पोस्ट कहता है कि एसक्यूएल सर्वर 2000 है, इसलिए आपको टी-एसक्यूएल का उपयोग करना होगा। To_Date और Sysdate T-SQL में मौजूद नहीं है
एंड्रयू फेलर

-1

Microsoft SQL सर्वर (T-SQL) में यह निम्नानुसार किया जा सकता है

--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

CURRENT_TIMESTAMP - क्वेरी के निष्पादन के समय sql सर्वर दिनांक देता है।

YEAR - वर्तमान समय की मुहर का वर्ष भाग प्राप्त करता है।

एसटीआर , एलटीआरआईएम - इन दो कार्यों को लागू किया जाता है ताकि हम इसे एक ऐसे चरचर में परिवर्तित कर सकें जिसे हमारे वांछित उपसर्ग के साथ समाहित किया जा सके (इस मामले में यह वर्ष की पहली तारीख या वर्ष की अंतिम तिथि है)। जो भी कारण YEAR फ़ंक्शन द्वारा उत्पन्न परिणाम के लिए पूर्वसर्ग स्थान है। उन्हें ठीक करने के लिए हम LTRIM फ़ंक्शन का उपयोग करते हैं जिसे ट्रिम छोड़ दिया जाता है।


-1

यदि यह 1 जनवरी तक पहुँच जाता है, तो आप इसे अभी भी पिछले साल की तारीख मान सकते हैं।

select
convert(date, DATEADD(yy, DATEDIFF(yy, 0,  DATEadd(day, -1,getdate())), 0), 103 ) AS StartOfYear,
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEDIFF(day, -1,getdate()))+1, -1), 103 )AS EndOfYear

-2

इसे इस्तेमाल करे:

DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')

Microsoft SQL सर्वर। Msg 195, Level 15, State 10, Line 1 'NOW' is not a recognized function name.
jumxozizi

यह उत्तर MySQL फ़ंक्शंस का उपयोग करता है (और स्ट्रिंग्स को डेट्स देता है, जो मेरे पालतू जानवरों में से एक है)।
अलवारो गोंजालेज

-3

--- लालमुनी दानव ---

create table Users
(
userid int,date_of_birth date
)

--- मान डालें ---

insert into Users values(4,'9/10/1991')

select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, 
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, 
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.