Converter o número do mês em função do nome do mês no SQL




sql-server tsql (24)

Você pode usar a função CONVERT embutida

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

Isso exibirá os 3 primeiros caracteres do mês (JAN, FEB, etc.)

Eu tenho meses armazenados no SQL Server como 1,2,3,4, ... 12. Gostaria de exibi-los como janeiro, fevereiro etc. Existe uma função no SQL Server como MonthName (1) = janeiro? Eu estou tentando evitar uma instrução CASE, se possível.


Para converter o número do mês em nome do mês, experimente o abaixo

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

Um pouco hacky mas deve funcionar:

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

Use esta declaração

SELECT TO_CHAR(current_date,'dd MONTH yyyy') FROM dual

isso irá converter o número do mês para o mês inteiro


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

Explicação

  1. Primeiro Decalre Variable MonthNumber
  2. Obter o mês atual para DatePart que retorna o número do mês
  3. Nome do terceiro mês de retorno da consulta

Eu acho que esta é a melhor maneira de obter o nome do mês quando você tem o número do mês

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

Ou

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

Claro que isso vai funcionar

select datename(M,GETDATE())

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

Use esta declaração para obter o nome do mês:

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

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

Isso lhe dará o nome do mês curto. Assim: jan, fev, mar, etc.


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

Basta subtrair o mês atual da data de hoje e adicionar novamente o seu número do mês. Em seguida, use a função de nome de dados para fornecer o nome completo em uma linha.

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

O seguinte funciona para mim:

CAST(GETDATE() AS CHAR(3))

Use esta instrução para converter o valor numérico do mês em Nome do mês.

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

Use o melhor caminho

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

além do original

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

você consegue fazer isso

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

Desta forma, você obtém nomes para todas as linhas de uma tabela. onde [nome_da_coluna] representa uma coluna inteira contendo o valor numérico de 1 a 12

2 representa qualquer número inteiro, por cadeia de contato eu criei uma data onde eu posso extrair o mês. '/ 1/2011' pode ser qualquer data

se você quiser fazer isso com variável

DECLARE @integer int;

SET @integer = 6;

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

Você pode criar uma função como esta para gerar o Mês e fazer SELECT dbo.fn_GetMonthFromDate (date_column) como 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

Você pode obter a data como esta. por exemplo: - Tabela de usuários

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

você pode pegar o monthname assim

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

saída

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

Este trabalhou para mim:

@MetricMonthNumber (some number)

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

De um post acima de @leoinfo e @Valentino Vranken. Apenas fiz uma seleção rápida e funciona.


Não há função definida pelo sistema no SQL Server. Mas você pode criar sua própria função definida pelo usuário - uma função escalar. Você encontraria funções escalares no Object Explorer para seu banco de dados: Programmability-> Functions-> Scalar-valued Functions. Abaixo, eu uso uma variável de tabela para juntar tudo.

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

É muito simples.

select DATENAME(month, getdate())

saída: janeiro


Trabalhando para mim

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

A partir do SQL Server 2012, você pode usar FORMAT e DATEFROMPARTS para resolver esse problema. (Se você quiser nomes de meses de outras culturas, altere: en-US )

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

Se você quer um mês de três letras:

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

Se você realmente quiser, você pode criar uma função para isso:

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

Em alguns locais, como o hebraico, há meses bissextos dependentes do ano, portanto, para evitar erros nesses locais, considere a seguinte solução:

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

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




sql-server-2005