답변:
약간 해 키지 만 작동해야합니다.
SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
월 번호 가있을 때 월 이름 을 얻는 가장 좋은 방법이라고 생각합니다.
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
또는
Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
원본 외에
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')
히브리어와 같은 일부 로케일에서는 연도에 따라 윤년이 달라 지므로 이러한 로케일의 오류를 피하기 위해 다음 해결책을 고려할 수 있습니다.
SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')
SQL Server 2012부터는 FORMAT 및 DATEFROMPARTS 를 사용 하여이 문제를 해결할 수 있습니다. (다른 문화권의 월 이름을 원하면 다음을 변경하십시오. 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
이런 날짜를 얻을 수 있습니다. 예 : 사용자 테이블
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 |
이 이름을 사용하여 월 이름을 얻으십시오.
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 월 등
다음은 문제를 해결하기 위해 다른 사람의 정보를 사용하는 솔루션입니다.
datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname
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]
이와 같은 함수를 생성하여 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
가장 쉬운 방법은 함수를 호출하는 것 MONTHNAME(your_date)
입니다. your_date 는 정적 값이거나 테이블 필드 중 하나의 값일 수 있습니다.