SQL에서 월 번호를 월 이름 함수로 변환


210

1,2,3,4, ... 12로 SQL Server에 개월이 저장되어 있습니다. 1 월, 2 월 등으로 표시하고 싶습니다. SQL Server에 MonthName (1) = January와 같은 함수가 있습니까? 가능한 경우 CASE 문을 피하려고합니다.

답변:


158

약간 해 키지 만 작동해야합니다.

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

2
왜 '-1'입니까? SQL Server의 월이 1 씩 상쇄되기 때문에 필요한가요?
Hassan Gulzar

2
@ DoomerDGR8 실제로 dateadd 함수를 시드하는 데 사용되는 날짜가 1부터 시작하기 때문에 1 월의 날짜 이름이 필요한 경우 2008-01-01에 1 개월을 추가하여 2008-02-01을 제공합니다. 이월. 이것을 설명하기 위해 1을 빼고 1 월을 다시 얻습니다.
DForck42

날짜 시간에서 1을 빼는 문제를 해결하려면 1 월이 아닌 12 월의 날짜 시간을 사용하십시오. 예를 들어 SELECT DATENAME (month, DATEADD (month, @mydate, CAST ( '1978-12-01'AS datetime))))
Steve Matthews

3
이것은 좋은 정보이지만 월 번호를 월 이름으로 변환하는 방법에 대한 질문에 실제로 대답하지 못합니다 (대신 날짜에서 월 이름을 얻는 방법에 대한 답변). 당신은 그가 월 숫자가 아닌 날짜 시간 값을 가지고 있다고 가정했습니다; 이 기능을 사용하려면 이제 날짜 / 시간 값을 '발명'해야합니다. leoinfo의 솔루션이 조금 더 관련이 있다고 생각하십시오
schizoid04

277

월 번호 가있을 때 월 이름 을 얻는 가장 좋은 방법이라고 생각합니다.

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

또는

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

24
가독성을 위해 실제로 다음과 같이 작성합니다. Select DateName (month, DateAdd (month, @MonthNumber-1, '1900-01-01'))
Valentino Vranken

10
가능한 대안 솔루션 DateName (month, DateAdd (month, @MonthNumber, -1))
Asif

4
저건 완벽 해. 이것이 답이되어야합니다.
gotqn

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

3
SO가 요청한 것처럼 월 번호가 아닌 날짜별로 월 이름이 표시됩니다.
Imad

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

9
나는이 매우 왼쪽에있는 대안적인 사고 방식을 좋아한다! 생각을위한 음식
Michael Rodrigues

2
그리고 결정적입니다! 덕분에 계산 열로도 사용할 수 있습니다.
Irawan Soetomo

1
nice ... 1 월에서 [#]까지 몇 달 동안 얻을 수있는 간단한 코드를 찾고있었습니다. 몇 개월을 표시하려면 다음과 같이 변경하십시오. >> SUBSTRING ( 'JAN 2 월 3 월 6 월 7 월 8 월 9 월 10 월 11 월', 0, (@intMonth * 4))
Pablo Contreras

2
나는 이것을 "올바른 방법"으로 생각하지는 않지만 다른 문제를 해결하는 데 사용할 수있는 재미있는 방법입니다.
Paul

31

가장 좋은 방법을 사용하십시오

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

21

매우 간단합니다.

select DATENAME(month, getdate())

출력 : 1 월


4
이것은 월 정수가 아닌 전체 날짜 값을 가진 경우에만 작동합니다.
gunr2171

2
이것은 질문에 대한 답변이 아닙니다. 그는 MonthName (1)과 같은 함수를 구현하는 방법을 묻고 있습니다.
amuliar

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]은 숫자 값 1-12를 포함하는 정수 열을 나타냅니다.

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()))

내가 실수하지 않으면 OP가 요청 한대로 정수를 사용하지 않습니다.
유입 :

5

히브리어와 같은 일부 로케일에서는 연도에 따라 윤년이 달라 지므로 이러한 로케일의 오류를 피하기 위해 다음 해결책을 고려할 수 있습니다.

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

1
SQL에서 날짜를 유대인 날짜로 변환하는 기능이 있습니까? 내가 아는 것은 ...
Hila DG

유대인 날짜로 변환하는 기능 : blogs.microsoft.co.il/gerireshef/2011/03/29/…
AJ AJ


5

SQL Server 2012부터는 FORMATDATEFROMPARTS 를 사용 하여이 문제를 해결할 수 있습니다. (다른 문화권의 월 이름을 원하면 다음을 변경하십시오. en-US)

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

3 글자 달을 원한다면 :

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

이것이 내가 찾고있는 것입니다. 솔루션 주셔서 감사합니다.
압둘라 알 마문

아마도 가장 효율적인 것은 아니지만 아마도 가장 쉽게 읽을 수 있습니다.
Paul

1
심지어 현지화를 지원합니다! .. 단!
Rosdi Kasim

4

아래와 같이 변환 기능을 사용할 수 있습니다

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

4

오늘 날짜에서 현재 월을 빼고 월 번호를 다시 추가하십시오. 그런 다음 datename 함수를 사용하여 한 줄에 전체 이름을 지정하십시오.

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 )

설명 :

  1. 첫 번째 데칼 변수 MonthNumber
  2. DatePart반품 월 번호가있는 현재 월 가져 오기
  3. 세 번째 쿼리 반환 월 이름

1
select monthname(curdate());

또는

select monthname('2013-12-12');

1

나를 위해 일하고

SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>

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/…
Janaka Pushpakumara

OP는 mysql이 아닌 sql-server를 요청했습니다.
tavalendo

0

이 이름을 사용하여 월 이름을 얻으십시오.

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

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

이것은 당신에게 짧은 달 이름을 줄 것입니다. 1 월, 2 월, 3 월 등


0

다음은 문제를 해결하기 위해 다른 사람의 정보를 사용하는 솔루션입니다.

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

0

SQL Server에는 시스템 정의 기능이 없습니다. 그러나 사용자 정의 함수 인 스칼라 함수를 작성할 수 있습니다. 데이터베이스의 오브젝트 탐색기에서 스칼라 함수를 찾을 수 있습니다 (프로그램 가능성-> 함수-> 스칼라 값 함수). 아래에서는 테이블 변수를 사용하여 모두 모았습니다.

--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

이와 같은 함수를 생성하여 Month를 생성하고 Month FROM table_name으로 SELECT 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

MONTHNAME 선택 (concat ( '1970-', [Month int val], '-01'))

예-SELECT MONTHNAME (concat ( '1970-', 4, '-01'))

답변-4 월

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.