Risposte:
Un po 'confuso ma dovrebbe funzionare:
SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
Penso che questo sia il modo migliore per ottenere il nome del mese quando hai il numero del mese
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
O
Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
oltre all'originale
SELECT DATENAME(m, str(2) + '/1/2011')
Puoi farlo
SELECT DATENAME(m, str([column_name]) + '/1/2011')
in questo modo ottieni nomi per tutte le righe in una tabella. dove [nome_colonna] rappresenta una colonna intera contenente valori numerici da 1 a 12
2 rappresenta qualsiasi numero intero, per stringa di contatto ho creato una data in cui posso estrarre il mese. '/ 1/2011' può essere qualsiasi data
se vuoi farlo con variabile
DECLARE @integer int;
SET @integer = 6;
SELECT DATENAME(m, str(@integer) + '/1/2011')
Utilizzare questa istruzione per convertire il valore numerico del mese in nome del mese.
SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
In alcuni locali come l'ebraico, ci sono mesi bisestili che dipendono dall'anno, quindi per evitare errori in tali locali potresti considerare la seguente soluzione:
SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')
A partire da SQL Server 2012, è possibile utilizzare FORMAT e DATEFROMPARTS per risolvere questo problema. (Se vuoi nomi di mesi di altre culture, cambia en-US
:)
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
Se vuoi un mese di tre lettere:
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')
Se vuoi davvero, puoi creare una funzione per questo:
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
È possibile utilizzare la funzione di conversione come di seguito
CONVERT(VARCHAR(3), DATENAME(MM, GETDATE()), 100)
Basta sottrarre il mese corrente dalla data odierna, quindi aggiungere nuovamente il numero del mese. Quindi utilizzare la funzione nome dati per dare il nome completo tutto in 1 riga.
print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
Questo ha funzionato per me:
@MetricMonthNumber (some number)
SELECT
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName
Da un post sopra di @leoinfo e @Valentino Vranken. Ho appena fatto una selezione rapida e funziona.
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
spiegazione:
MonthNumber
DatePart
quale numero del mese di ritornoLavora per me
SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
puoi ottenere la data in questo modo. ad es .: - Tabella utenti
id name created_at
1 abc 2017-09-16
2 xyz 2017-06-10
puoi ottenere il nome del mese in questo modo
select year(created_at), monthname(created_at) from users;
produzione
+-----------+-------------------------------+
| year(created_at) | monthname(created_at) |
+-----------+-------------------------------+
| 2017 | september |
| 2017 | june |
Usa questa affermazione per ottenere il nome del mese:
DECLARE @date datetime
SET @date='2015/1/4 00:00:00'
SELECT CAST(DATENAME(month,@date ) AS CHAR(3))AS 'Month Name'
Questo ti darà il nome del mese breve. In questo modo: Jan, Feb, Mar, ecc.
Ecco la mia soluzione usando alcune informazioni di altri per risolvere un problema.
datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname
Non esiste una funzione definita dal sistema in SQL Server. Ma puoi creare la tua funzione definita dall'utente, una funzione scalare. Troverai funzioni scalari in Esplora oggetti per il tuo database: Programmabilità-> Funzioni-> Funzioni con valori scalari. Di seguito, utilizzo una variabile di tabella per riunire tutto.
--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]
È possibile creare una funzione come questa per generare il mese ed eseguire SELECT dbo.fn_GetMonthFromDate (date_column) come 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
Il modo più semplice è chiamando la funzione MONTHNAME(your_date)
. your_date può essere un valore statico o il valore di uno dei campi della tabella.
SELEZIONA MONTHNAME (concat ('1970 -', [Month int val], '- 01'))
esempio- SELEZIONA MONTHNAME (concat ('1970 -', 4, '- 01'))
risposta - aprile