web-dev-qa-db-fra.com

Convertir le numéro du mois en nom de mois Fonction en SQL

J'ai des mois stockés dans SQL Server en tant que 1,2,3,4, ... 12. Je voudrais les afficher comme janvier, février etc. Y at-il une fonction dans SQL Server comme MonthName (1) = janvier? J'essaie d'éviter une déclaration CASE, si possible.

193
Saif Khan

Un petit hacky mais qui devrait marcher:

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

Je pense que c’est le meilleur moyen d’obtenir le nom mois lorsque vous avez le numéro mois

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

Ou 

Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
238
leoinfo
SELECT DATENAME(month, GETDATE()) AS 'Month Name'
89
Dharamvir
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
63
Darryl Martin

Utilisez le meilleur moyen  

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

C'est très simple.

select DATENAME(month, getdate())

sortie: janvier

20
Saeed ur Rehman

Ce qui suit fonctionne pour moi:

CAST(GETDATE() AS CHAR(3))
6
unitario

en plus de l'original

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

tu peux le faire

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

de cette façon, vous obtenez des noms pour toutes les lignes d'une table. où [nom_colonne] représente une colonne entière contenant une valeur numérique comprise entre 1 et 12

2 représente un entier quelconque, par chaîne de contact, j'ai créé une date permettant d'extraire le mois. '/ 1/2011' peut être n'importe quelle date

si vous voulez faire cela avec variable

DECLARE @integer int;

SET @integer = 6;

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

Utilisez cette instruction pour convertir la valeur numérique du mois en nom de mois.

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
4
Ashish Singh

Vous pouvez utiliser la fonction CONVERT intégrée

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

Cela affichera les 3 premiers caractères du mois (JAN, FEB etc.)

4
Tagore Peethala

Dans certains endroits comme l'hébreu, il existe mois bissextiles dépendant de l'année. Pour éviter les erreurs, utilisez la solution suivante:

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

Vous pouvez utiliser la fonction de conversion comme ci-dessous

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

Sûr que cela fonctionnera

select datename(M,GETDATE())
3
Shyam Sa

Soustrayez simplement le mois en cours de la date du jour, puis rajoutez votre numéro de mois. Puis utilisez la fonction datename pour donner le nom complet tout en 1 ligne.

print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
3
Geoffrey Fuller

Pour convertir le numéro du mois en nom de mois, essayez ce qui suit.

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

je pense que cela suffit pour obtenir le nom du mois lorsque vous avez une date.

SELECT DATENAME(month ,GETDATE())
2
Benazir

Travailler pour moi

SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
1
Kashif Aslam
select monthname(curdate());

OR

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

vous pouvez obtenir la date comme ça. Exemple: - Utilisateurs table

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

vous pouvez obtenir le nom de famille comme ça

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

sortie

+-----------+-------------------------------+
| year(created_at) | monthname(created_at)  |
+-----------+-------------------------------+
|      2017        | september              |
|      2017        | june                   |
1
Janaka Pushpakumara

À partir de SQL Server 2012, vous pouvez utiliser FORMAT et DATEFROMPARTS pour résoudre ce problème. (Si vous voulez des noms de mois d'autres cultures, changez: en-US)

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

Si vous voulez un mois de trois lettres:

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

Si vous le souhaitez vraiment, vous pouvez créer une fonction pour cela:

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
1
Paul
SELECT DATENAME(MONTH,dateadd(month, -3,getdate()))
1
gvila
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

Explication:

  1. Première variable Decalre MonthNumber
  2. Obtenir le mois en cours pour DatePart qui renvoie le numéro du mois
  3. Nom du troisième mois de retour de requête
1
Wafa Abbas

Celui-ci a fonctionné pour moi: 

@MetricMonthNumber (some number)

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

Extrait d'un message de @leoinfo et @Valentino Vranken. Je viens de faire une sélection rapide et cela fonctionne. 

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

Le moyen le plus simple consiste à appeler la fonction MONTHNAME(your_date). your_date peut être une valeur statique ou la valeur de l’un de vos champs de table.

Il n'y a pas de fonction définie par le système dans le serveur SQL. Mais vous pouvez créer votre propre fonction définie par l'utilisateur, une fonction scalaire. Vous trouverez des fonctions scalaires dans l'explorateur d'objets pour votre base de données: Programmabilité-> Fonctions-> Fonctions à valeurs scalaires. Ci-dessous, j'utilise une variable de table pour tout rassembler.

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

Voici ma solution en utilisant des informations provenant d'autres personnes pour résoudre un problème.

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

Vous pouvez créer une fonction comme celle-ci pour générer le mois et doSELECT dbo.fn_GetMonthFromDate (date_column) sous Month FROM nom_table


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

Utilisez cette déclaration pour obtenir le nom du mois:

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

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

Cela vous donnera un nom de mois court. Comme ceci: janvier, février, mars, etc.

0
user4972370