IT story

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

hot-time 2020. 5. 9. 09:21
반응형

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


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


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

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

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

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

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

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

매우 간단합니다.

select DATENAME(month, getdate())

출력 : 1 월


내장 CONVERT기능을 사용할 수 있습니다

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

월의 첫 3 자 (JAN, FEB 등)가 표시됩니다.


원본 외에

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 CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))

다음은 나를 위해 작동합니다.

CAST(GETDATE() AS CHAR(3))

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

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

물론 작동합니다

select datename(M,GETDATE())

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

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

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

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

나는 이것이 날짜가있을 때 월 이름을 얻는 것으로 충분하다고 생각합니다.

SELECT DATENAME(month ,GETDATE())

SELECT DateName(M, DateAdd(M, @MONTHNUMBER, -1))

월 번호를 월 이름으로 변환하려면 아래를 시도하십시오

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

SELECT DATENAME(MONTH,dateadd(month, -3,getdate()))

Starting with SQL Server 2012, you can use FORMAT and DATEFROMPARTS to solve this problem. (If you want month names from other cultures, change: en-US)

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

If you want a three-letter month:

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

If you really want to, you can create a function for this:

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

This one worked for me:

@MetricMonthNumber (some number)

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

From a post above from @leoinfo and @Valentino Vranken. Just did a quick select and it works.


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

Explaination:

  1. First Decalre Variable MonthNumber
  2. Get Current Month for DatePart which Return Month Number
  3. Third Query Return Month Name

select monthname(curdate());

OR

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

Working for me

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

you can get the date like this. eg:- Users table

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

you can get the monthname like this

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

output

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

Use this statement for getting month name:

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

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

This will give you short month name. Like this: Jan, Feb, Mar, etc.


Here is my solution using some information from others to solve a problem.

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

There is no system defined function in SQL server. But you can create your own user-defined function- a scalar function. You would find scalar functions in the Object Explorer for your database: Programmability->Functions->Scalar-valued Functions. Below, I use a table variable to bring it all together.

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

You can create a function like this to generate the Month and do SELECT dbo.fn_GetMonthFromDate(date_column) as Month FROM table_name


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

The easiest way is by calling the function MONTHNAME(your_date). your_date can be a static value or the value from one of your table fields.


to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')

where V_MONTH_NUM is the month number

SELECT to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')  from dual;

참고URL : https://stackoverflow.com/questions/185520/convert-month-number-to-month-name-function-in-sql

반응형