Преобразование числа месяцев в месяц Функция имени в SQL

У меня есть месяцы, хранящиеся в SQL Server, как 1,2,3,4,... 12. Я хотел бы показать их как январь, февраль и т.д. Есть ли функция в SQL Server, например MonthName (1) = январь? Я стараюсь, если возможно, избегать оператора CASE.

Ответ 1

Немного взломанный, но должен работать:

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

Ответ 2

Я думаю, что это лучший способ получить название месяца, когда у вас есть номер месяца

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

Или

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

Ответ 3

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

Ответ 4

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

Ответ 5

Использовать лучший способ

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

Ответ 6

Это очень просто.

select DATENAME(month, getdate())

вывод: январь

Ответ 7

Вы можете использовать встроенную функцию CONVERT

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

Это отображает первые 3 символа месяца (JAN, FEB и т.д.)

Ответ 8

в дополнение к оригиналу

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

Ответ 9

Следующие работы для меня:

CAST(GETDATE() AS CHAR(3))

Ответ 10

Используйте этот оператор для преобразования числового значения месяца в название месяца.

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

Ответ 11

В некоторых местах, таких как иврит, есть високосные месяцы в зависимости от года, поэтому, чтобы избежать ошибок в таких локалях, вы можете рассмотреть следующее решение

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

Ответ 12

Вы можете использовать функцию преобразования, как показано ниже

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

Ответ 13

Конечно, это будет работать

select datename(M,GETDATE())

Ответ 14

Просто вычтите текущий месяц с сегодняшней даты, а затем добавьте свой номер месяца. Затем используйте функцию datename, чтобы дать полное имя в 1 строке.

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

Ответ 15

Я думаю, этого достаточно, чтобы получить название месяца, когда у вас есть дата.

SELECT DATENAME(month ,GETDATE())

Ответ 16

Чтобы преобразовать имя месяца в месяц, попробуйте ниже

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

Ответ 17

Начиная с SQL Server 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

Ответ 18

Это работало для меня:

@MetricMonthNumber (some number)

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

Из сообщения выше из @leoinfo и @Valentino Vranken. Просто сделал быстрый выбор, и он работает.

Ответ 19

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

Explaination:

  • Первая переменная декаля MonthNumber
  • Получить текущий месяц для DatePart, который возвращает номер месяца
  • Имя месяца с возвратом третьего запроса

Ответ 20

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

Ответ 21

select monthname(curdate());

ИЛИ

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

Ответ 22

Работа для меня

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

Ответ 23

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

Ответ 24

вы можете получить такую ​​дату. например: - Пользователи таблица

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                   |

Ответ 25

Используйте этот оператор для получения имени месяца:

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

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

Это даст вам короткое название месяца. Например: Jan, Feb, Mar и т.д.

Ответ 26

Вот мое решение, использующее некоторую информацию от других, чтобы решить проблему.

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

Ответ 27

В SQL-сервере нет системной функции. Но вы можете создать свою собственную пользовательскую функцию - скалярную функцию. Вы найдете скалярные функции в Object Explorer для своей базы данных: Programmability- > Functions- > Scalar-value Functions. Ниже я использую переменную таблицы, чтобы собрать все это.

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

Ответ 28

Вы можете создать такую функцию, чтобы сгенерировать Месяц и сделать 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

Ответ 29

Самый простой способ - вызвать функцию MONTHNAME(your_date). your_date может быть статическим значением или значением из одного из полей вашей таблицы.

Ответ 30

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

где V_MONTH_NUM - номер месяца

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