SQL में महीना नंबर को महीना नाम समारोह में बदलें


210

मेरे पास एसक्यूएल सर्वर में 1,2,3,4, ... 12 के रूप में महीने संग्रहीत हैं। मैं उन्हें जनवरी, फरवरी आदि के रूप में प्रदर्शित करना चाहूंगा। क्या एसक्यूएल सर्वर में कोई कार्य है जैसे मंथनाम (1) = जनवरी? मैं अगर संभव हो तो एक CASE स्टेटमेंट से बचने की कोशिश कर रहा हूं।

जवाबों:


158

थोड़ा हैसी लेकिन काम करना चाहिए:

SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))

2
क्यों '-1'? क्या इसकी आवश्यकता है क्योंकि SQL सर्वर में महीने एक से ऑफसेट हैं?
हसन गुलज़ार

2
@ DoomerDGR8 यह वास्तव में है क्योंकि डेटेड फ़ंक्शन को सीड करने के लिए उपयोग की जाने वाली तारीख 1 से शुरू होती है। अगर हमें जनवरी के डेटनेम की आवश्यकता है, तो हम 1 महीने से 2008-01-01 तक जोड़ देंगे, जो हमें 2008-02-01, जो है फरवरी। इसलिए हम इसके लिए 1 को घटाते हैं, और हम फिर से जनवरी प्राप्त करते हैं।
DForck42

अपने डेटाटाइम से 1 घटाए जाने की समस्या के बारे में जानने के लिए, दिसंबर में डेटाइम का उपयोग करें, जनवरी के विपरीत। उदाहरण के लिए सेलेक्ट DATENAME (महीना, DATEADD (महीना, @ मिडेट, CAST (1978-12-01 'AS डेटाइम)))
स्टीव मैथ्यू

3
यह जानकारी का एक अच्छा टुकड़ा है, लेकिन वास्तव में इस सवाल का जवाब देने में विफल रहता है कि एक महीने की संख्या को एक महीने के नाम में कैसे बदला जाए (बल्कि एक तारीख से एक महीने का नाम कैसे प्राप्त करें) का जवाब देता है। आपने मान लिया है कि उसके पास केवल महीने की संख्या के बजाय डेटाइम मूल्य है; इसे प्राप्त करने के लिए आपको अब एक दिनांक / समय मान का आविष्कार करने की आवश्यकता है। लगता है कि leoinfo से समाधान थोड़ा अधिक प्रासंगिक था
schizoid04

277

मुझे लगता है कि महीने का नाम पाने के लिए यह सबसे अच्छा तरीका है जब आपके पास महीने की संख्या हो

Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

या

Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )

24
पठनीयता के उद्देश्यों के लिए मैं वास्तव में इसे इस तरह से लिखूंगा: डेटनेम (महीने, दिनांकअड्डे (महीने, @ मंथनंबर - 1, '1900-01-01') का चयन करें
वैलेंटिनो व्रोकन

10
एक संभावित विकल्प के समाधान का चयन DateName (महीने, DATEADD (महीने, @MonthNumber, -1))
आसिफ

4
यह बिल्कुल सही है। इसका उत्तर होना चाहिए।
गत

94
SELECT DATENAME(month, GETDATE()) AS 'Month Name'

3
जैसा कि एसओ ने कहा था कि महीने की तारीख से महीने का नाम मिल रहा है।
इमाद

72
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)

9
मुझे थिंकिंग का यह बहुत बाएं क्षेत्र का वैकल्पिक तरीका पसंद है! विचार के लिए भोजन
माइकल रोड्रिग्स

2
और यह नियतात्मक है! कम्प्यूटेड कॉलम के रूप में भी इस्तेमाल किया जा सकता है, धन्यवाद!
इरावन सोइतोमो

1
अच्छा ... मैं जून से [#] तक कुछ सरल कोड ढूंढ रहा था और इसने बहुत अच्छा काम किया। कई महीनों तक प्रदर्शित करने के लिए, बस कुछ इस तरह से बदल दें >> SUBSTRING ('JAN FEB MAR APR MUN JUN AUL SEP OCT NOV DEC', 0, ((@intMonth * 4))
Contreras

2
मैं निश्चित रूप से इसे "सही तरीका" नहीं समझूंगा, लेकिन यह एक मजेदार तरीका है जिसका उपयोग अन्य समस्याओं को हल करने के लिए किया जा सकता है।
पॉल

31

सबसे अच्छा तरीका का उपयोग करें

Select DateName( month , DateAdd( month , @MonthNumber , -1 ))

21

यह बहुत ही सरल है।

select DATENAME(month, getdate())

आउटपुट: जनवरी


4
यह केवल तभी काम करता है जब आपके पास पूर्ण तिथि मान हो, न कि एक महीने का पूर्णांक।
gunr2171

2
यह सवाल का जवाब नहीं है। वह पूछ रहा है कि मंथनाम (1) जैसे फंक्शन को कैसे लागू किया जाए।
अमूलर

8

आप इनबिल्ट CONVERTफ़ंक्शन का उपयोग कर सकते हैं

select CONVERT(varchar(3), Date, 100)  as Month from MyTable.

यह महीने के पहले 3 अक्षर (JAN, FEB आदि) प्रदर्शित करेगा।


7

मूल के अलावा

SELECT DATENAME(m, str(2) + '/1/2011')

तुम यह केर सकते हो

SELECT DATENAME(m, str([column_name]) + '/1/2011')

इस तरह से आपको एक तालिका में सभी पंक्तियों के नाम मिलते हैं। जहां [column_name] एक पूर्णांक स्तंभ का प्रतिनिधित्व करता है जिसमें 12 के माध्यम से संख्यात्मक मान 1 होता है

2 किसी भी पूर्णांक का प्रतिनिधित्व करता है, संपर्क स्ट्रिंग द्वारा मैंने एक तारीख बनाई जहां मैं महीने निकाल सकता हूं। '/ 1/2011' कोई भी तारीख हो सकती है

यदि आप चर के साथ ऐसा करना चाहते हैं

DECLARE @integer int;

SET @integer = 6;

SELECT DATENAME(m, str(@integer) + '/1/2011')

7

निम्नलिखित मेरे लिए काम करता है:

CAST(GETDATE() AS CHAR(3))

6

इस कथन का उपयोग महीना संख्यात्मक मान को महीना नाम में परिवर्तित करने के लिए करें।

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))

जब तक मैं गलत नहीं हूँ यह एक पूर्णांक का उपयोग नहीं कर रहा है, जैसा कि ओपी ने पूछा है।
प्रभावशाली

5

हिब्रू जैसे कुछ स्थानों में, इस तरह के स्थानों में त्रुटियों से बचने के लिए वर्ष पर निर्भर रहने वाले लीप महीने हैं, आप निम्नलिखित समाधान पर विचार कर सकते हैं:

SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')     

1
एसक्यूएल में एक तारीख को यहूदी तिथि में परिवर्तित करने का कोई कार्य है? ऐसा नहीं है कि मुझे पता है ...
हेला महानिदेशक

यहूदी तिथि में बदलने के लिए कार्य: blogs.microsoft.co.il/gerireshef/2011/03/29/…
AJ AJ


5

SQL सर्वर 2012 से प्रारंभ करके, आप इस समस्या को हल करने के लिए FORMAT और DATEFROMPARTS का उपयोग कर सकते हैं । (यदि आप अन्य संस्कृतियों से महीने के नाम चाहते हैं, तो परिवर्तन करें en-US) :

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')

यदि आप तीन महीने का महीना चाहते हैं:

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')

यदि आप वास्तव में चाहते हैं, तो आप इसके लिए एक फ़ंक्शन बना सकते हैं:

CREATE FUNCTION fn_month_num_to_name
(
    @month_num tinyint
)
RETURNS varchar(20)
AS
BEGIN
    RETURN FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
END

यही है जिसकी मेरे द्वारा तलाश की जा रही है। समाधान के लिए धन्यवाद।
अब्दुल्ला अल मामुन

यह शायद सबसे कुशल नहीं है, लेकिन यह शायद सबसे आसानी से पठनीय है।
पॉल

1
यह स्थानीयकरण का समर्थन भी करता है! .. मीठा!
रोजी कासिम

4

आप नीचे दिए गए रूपांतरित शब्दकोष का उपयोग कर सकते हैं

CONVERT(VARCHAR(3), DATENAME(MM, GETDATE()), 100)

4

आज की तारीख से बस वर्तमान महीने घटाएं, फिर अपना महीना नंबर वापस जोड़ें। फिर सभी लाइन में पूरा नाम देने के लिए डिटेंमे फंक्शन का उपयोग करें।

print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))

3

मुझे लगता है कि यह पर्याप्त है जब महीने की तारीख हो, जब आपके पास तारीख हो।

SELECT DATENAME(month ,GETDATE())


3

महीने की संख्या को महीने के नाम में बदलने के लिए, नीचे का प्रयास करें

declare @month smallint = 1
select DateName(mm,DATEADD(mm,@month - 1,0))


1

यह एक मेरे लिए काम किया:

@MetricMonthNumber (some number)

SELECT 
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName

@Leoinfo और @Valentino Vranken से ऊपर की पोस्ट से। बस एक त्वरित चयन किया और यह काम करता है।


1
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

explaination:

  1. प्रथम दशांश चर MonthNumber
  2. वर्तमान महीना प्राप्त करें, DatePartजिसके लिए माहवार संख्या लौटाएं
  3. तीसरा क्वेरी रिटर्न मंथ नेम



1

आप इस तरह की तारीख प्राप्त कर सकते हैं। जैसे: - उपयोगकर्ता तालिका

id name created_at
1  abc  2017-09-16
2  xyz  2017-06-10

आप इस तरह से माहनाम प्राप्त कर सकते हैं

select year(created_at), monthname(created_at) from users;

उत्पादन

+-----------+-------------------------------+
| year(created_at) | monthname(created_at)  |
+-----------+-------------------------------+
|      2017        | september              |
|      2017        | june                   |

आप यहाँ प्रलेखन पा सकते हैं। w3resource.com/mysql/date-and-time-functions/…
जनक पुष्पकुमारा

ओपी ने एसक्यूएल-सर्वर के लिए माईस्क्ल नहीं मांगा।
तावलादो

0

महीने के नाम पाने के लिए इस कथन का उपयोग करें:

DECLARE @date datetime
SET @date='2015/1/4 00:00:00'

SELECT CAST(DATENAME(month,@date )  AS CHAR(3))AS 'Month Name'

यह आपको छोटे महीने का नाम देगा। जैसे: जन, फरवरी, मार्च, आदि।


0

यहाँ एक समस्या को हल करने के लिए दूसरों से कुछ जानकारी का उपयोग करके मेरा समाधान है।

datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname

0

SQL सर्वर में कोई सिस्टम परिभाषित फ़ंक्शन नहीं है। लेकिन आप अपना खुद का उपयोगकर्ता-परिभाषित फ़ंक्शन- एक स्केलर फ़ंक्शन बना सकते हैं। आपको अपने डेटाबेस के लिए ऑब्जेक्ट एक्सप्लोरर में स्केलर फ़ंक्शंस मिलेंगे: प्रोग्रामबिलिटी-> फ़ंक्शंस-> स्केलर-वैल्यू फ़ंक्शंस। नीचे, मैं इसे सभी को एक साथ लाने के लिए एक तालिका चर का उपयोग करता हूं।

--Create the user-defined function
CREATE FUNCTION getmonth (@num int)
RETURNS varchar(9) --since 'September' is the longest string, length 9
AS
BEGIN

DECLARE @intMonth Table (num int PRIMARY KEY IDENTITY(1,1), month varchar(9))

INSERT INTO @intMonth VALUES ('January'), ('February'), ('March'), ('April'), ('May')
                           , ('June'), ('July'), ('August') ,('September'), ('October')
                           , ('November'), ('December')

RETURN (SELECT I.month
        FROM @intMonth I
        WHERE I.num = @num)
END
GO

--Use the function for various months
SELECT dbo.getmonth(4) AS [Month]
SELECT dbo.getmonth(5) AS [Month]
SELECT dbo.getmonth(6) AS [Month]

0

मंथ को जेनरेट करने के लिए आप इस तरह का एक फंक्शन बना सकते हैं और सेलेक्ट कर सकते हैं dbo.fn_GetMonthFromDate (date_column) मंथ से टेबल_नाम के रूप में


/****** Object:  UserDefinedFunction [dbo].[fn_GetMonthFromDate]    Script Date: 11/16/2018 10:26:33 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fn_GetMonthFromDate] 
(@date datetime)
RETURNS varchar(50)
AS
BEGIN
    DECLARE @monthPart int

SET @monthPart = MONTH(@date) IF @monthPart = 1 BEGIN RETURN 'January' END ELSE IF @monthPart = 2 BEGIN RETURN 'February' END ELSE IF @monthPart = 3 BEGIN RETURN 'March' END ELSE IF @monthPart = 4 BEGIN RETURN 'April' END ELSE IF @monthPart = 5 BEGIN RETURN 'May' END ELSE IF @monthPart = 6 BEGIN RETURN 'June' END ELSE IF @monthPart = 7 BEGIN RETURN 'July' END ELSE IF @monthPart = 8 BEGIN RETURN 'August' END ELSE IF @monthPart = 9 BEGIN RETURN 'September' END ELSE IF @monthPart = 10 BEGIN RETURN 'October' END ELSE IF @monthPart = 11 BEGIN RETURN 'November' END ELSE IF @monthPart = 12 BEGIN RETURN 'December' END RETURN NULL END


0

सही मंथन (संक्षिप्त नाम ('1970 -', [महीना int val], '- 01'))

उदाहरण- सेलेक्ट मंथन (संक्षिप्त नाम (1970 - 4, 4, '- 01'))

जवाब- अप्रैल

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