SQL सर्वर 2005 में डेटाइम से महीने और वर्ष प्राप्त करें


87

मुझे 'जनवरी 2008' जैसे SQL सर्वर में डेटाइम से महीने + वर्ष की आवश्यकता है। मैं महीने, वर्ष के आधार पर समूह बना रहा हूं। मैंने खोजे और पाया है जैसे कि दिनांक, रूपांतर, आदि, लेकिन उनमें से कोई भी इसके लिए उपयोगी नहीं है। क्या मुझसे कोई चूक हो रही है? क्या इसके लिए कोई फ़ंक्शन है?


@ इवान कैरोल - इस सवाल का अपहरण करता है? यदि आपके पास प्रश्न का एक बेहतर उत्तर है, तो क्या इसे लोगों को एक अलग प्रश्न की ओर इशारा करने के बजाय प्रश्न के उत्तर के रूप में आपूर्ति नहीं की जानी चाहिए?
STLDev

@STLDeveloper यह कैसे अपहरण है। सवाल 2005 के लिए कहता है? मैंने वहां नहीं डाला। मैं 2005 की तलाश नहीं कर रहा हूँ .. दुर्भाग्य से, यहाँ सबसे अच्छा जवाब 2005 में काम नहीं करता है, यह 2012-स्पष्ट है। क्या मुझे पुरातन होने के लिए 2005 के उत्तर को रद्द कर देना चाहिए?
इवान कैरोल

@STLDeveloper वास्तव में, मुझे यहाँ परवाह नहीं है। =) मेरा आधिकारिक रुख हमेशा लोगों को PostgreSQL का उपयोग करने की सलाह देने का रहा है, यकीन नहीं कि मैं क्यों मदद करने की कोशिश कर रहा हूं।
इवान कैरोल

यह सिर्फ मुझे अजीब लगा कि आप उत्पाद के एक अलग संस्करण के लिए प्रश्न का नया संस्करण बनाने के लिए वापस चले गए, और फिर उस प्रश्न का उत्तर देने के लिए, जो मुझे लगता है कि ठीक है।
STLDev

जवाबों:


74

यदि आप मतलब है कि आप उन्हें एक स्ट्रिंग के रूप में वापस चाहते हैं, उस प्रारूप में;

SELECT 
  CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) 
FROM customers

यहां अन्य प्रारूप विकल्प दिए गए हैं


मैंने अपने SQL सर्वर पर CONVERT (CHAR (4), GetDate (), 100) का उपयोग करने की कोशिश की और मुझे इसके बजाय "09 1" मिला। मुझे 17 के लिए स्पेस और एक "1" मिला। "Select CONVERT (varchar, GetDate (), 100)" यील्ड "09 17 2009 4:59 PM" का उपयोग करके
नेप

1
यह अजीब है - मेरे द्वारा लिंक किए गए डॉक्स से, 100 को तीन-अक्षर महीने का संक्षिप्त नाम और एक स्थान वापस करना चाहिए, अगर एक CHAR (4) में चकित हो। लेकिन फिर, आपके द्वारा एक CONVERT (varchar, getdate (), 100) के लिए पोस्ट किया गया परिणाम अलग-अलग दिखता है जो मैं देखने की अपेक्षा करता हूं। आप SQLServer के किस संस्करण का उपयोग कर रहे हैं? आप कौन से स्थानीयकरण / अंतर्राष्ट्रीयकरण सेटिंग्स का उपयोग कर रहे हैं (यह नहीं कि यह 100 प्रारूप के लिए मायने रखें)।
रॉबसॉफ्ट

171
select 
datepart(month,getdate()) -- integer (1,2,3...)
,datepart(year,getdate()) -- integer
,datename(month,getdate()) -- string ('September',...)

तो, मुझे लगता है कि यह है कि मैं क्या चाहता हूँ, लेकिन मैं नहीं दिख रहा है कि कैसे TSQL के बीच अंतर समझना होगा datepart(month,getdate())और datepart(year,getdate())महीने और साल क्या हैं ?
jp2code

4
@ jp2code महीने और वर्ष मूल रूप से यहां परिभाषित हैं: msdn.microsoft.com/en-us/library/ms174420.aspx । TSQL उन्हें वैसे ही समझता है जैसे आप उन्हें पढ़ते हैं :)
Zachary Yates

1
LOL - धन्यवाद Zach। मैंने एक अलग साइट पर इसका पता लगाने से पहले बहुत समय तक अभिनय किया।
jp2code

कन्वर्ट फ़ंक्शन की तुलना में बहुत अधिक क्लीनर। #cleanCode
RBT

51

SQL सर्वर 2012 के साथ शुरुआत, आप उपयोग कर सकते हैं:

SELECT FORMAT(@date, 'yyyyMM')

1
अच्छा खेला सर ... इसने 2012 में मेरे सवाल का जवाब दिया
स्क्वेअर

मुझे खुशी है कि मैंने इसे दूर तक स्क्रॉल किया, यह साफ और सरल है। धन्यवाद!
निकोलस

यह एक मूल्यवान योगदान है, लेकिन इसका जवाब कहीं और दिया जाना चाहिए, stackoverflow.com/a/43196370/124486
इवान कैरोल

12

उपयोग:

select datepart(mm,getdate())  --to get month value
select datename(mm,getdate())  --to get name of month

11

मजेदार, मैं SQL सर्वर और फिर LINQ में इसी क्वेरी को लिखने के आसपास बस खेल रहा था।

SELECT 
    DATENAME(mm, article.Created) AS Month, 
    DATENAME(yyyy, article.Created) AS Year, 
    COUNT(*) AS Total 
FROM Articles AS article 
GROUP BY 
    DATENAME(mm, article.Created), 
    DATENAME(yyyy, article.Created) 
ORDER BY Month, Year DESC

यह निम्नलिखित ouput (उदाहरण) का उत्पादन करता है।

Month | Year | Total

January | 2009 | 2

9

SQL सर्वर 2012 में, नीचे उपयोग किया जा सकता है

FORMAT (getdate), 'MMM yyyy' चुनें

यह सटीक "जून 2016" देता है


6

इस बारे में कैसा है?

Select DateName( Month, getDate() ) + ' ' + DateName( Year, getDate() )


5

वह प्रारूप मौजूद नहीं है। आपको दो चीजों का संयोजन करने की आवश्यकता है,

select convert(varchar(4),getdate(),100)  + convert(varchar(4),year(getdate()))

4

इसके साथ सबसे अच्छा तरीका है:

dateadd(month,datediff(month,0,*your_date*),0)

यह आपके डेटाटाइम प्रकार को बनाए रखेगा


1
यह अब तक का सबसे अच्छा जवाब है, किसी भी तारीख को महीने और साल के लिए मजबूर करना, दिन और समय के घटकों की अनदेखी करना। स्वीकृत उत्तर की तुलना में बहुत बेहतर है क्योंकि सूचना को सही ढंग से क्रमबद्ध किया जा सकता है और डाउनस्ट्रीम रिपोर्टिंग टूल में एक तारीख के रूप में सही ढंग से कार्य करता है।
जेमी थॉमस

मैं तहे दिल से सहमत हूं कि यह महीने की शुरुआत पाने का सबसे अच्छा तरीका है। यह डेटा प्रकार को डेटाइम रखता है, और रेंडरिंग को फ्रंट एंड तक छोड़ देता है, जहां यह होना चाहिए। यह एक क्षेत्र के महीने तक समूह पंक्तियों जैसी चीजों को करने का सही तरीका है।
जेफ ब्रेडर

2

पूरे महीने का नाम लौटाता है, -, पूरा वर्ष उदा March-2017

CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate()))

2
इस सवाल के पहले से ही 18 अन्य उत्तर हैं। आपका उत्तर क्या नई जानकारी जोड़ता है?
stanius

1

मुझे भी यही समस्या थी और चारों ओर देखने के बाद मैंने पाया:

SELECT DATENAME(yyyy, date) AS year
FROM Income
GROUP BY DATENAME(yyyy, date)

यह बहुत अच्छा काम कर रहा है!


1

महीने के पहले तारीख को परिवर्तित करना आपको एकल विशेषता द्वारा समूह बाय और ऑर्डर करने की अनुमति देता है, और यह मेरे अनुभव में तेज है।

declare @mytable table(mydate datetime)
declare @date datetime
set @date = '19000101'
while @date < getdate() begin
    insert into @mytable values(@date)
    set @date = dateadd(day,1,@date)
end

select count(*) total_records from @mytable

select dateadd(month,datediff(month,0,mydate),0) first_of_the_month, count(*) cnt
from @mytable
group by dateadd(month,datediff(month,0,mydate),0)

1
---Lalmuni Demos---
create table Users
(
userid int,date_of_birth date
)
---insert values---
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



0

हां, आप datename(month,intime)पाठ में महीना प्राप्त करने के लिए उपयोग कर सकते हैं ।


0
  ,datename(month,(od.SHIP_DATE)) as MONTH_

उत्तर: MONTH_ जनवरी जनवरी सितंबर अक्टूबर दिसंबर अक्टूबर अक्टूबर सितंबर


0

यह बहुत अच्छा है।

DECLARE @pYear VARCHAR(4)

DECLARE @pMonth VARCHAR(2)

DECLARE @pDay VARCHAR(2)

SET @pYear  = RIGHT(CONVERT(CHAR(10), GETDATE(), 101), 4)

SET @pMonth = LEFT(CONVERT(CHAR(10), GETDATE(), 101), 2)

SET @pDay   = SUBSTRING(CONVERT(CHAR(10), GETDATE(), 101), 4,2)

SELECT @pYear,@pMonth,@pDay

-3

निम्नलिखित पूरी तरह से काम करता है! मैंने अभी इसका उपयोग किया है, इसे आज़माएं।

date_format(date,'%Y-%c')

2
यह एक मान्य sql सर्वर फ़ंक्शन या स्टेटमेंट नहीं है
franko_camron
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.