Antworten:
Ein bisschen hacky sollte aber funktionieren:
SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
Ich denke, dies ist der beste Weg, um den Monatsnamen zu erhalten, wenn Sie die Monatsnummer haben
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
Oder
Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
Es ist sehr einfach.
select DATENAME(month, getdate())
Ausgabe: Januar
zusätzlich zum Original
SELECT DATENAME(m, str(2) + '/1/2011')
du kannst das
SELECT DATENAME(m, str([column_name]) + '/1/2011')
Auf diese Weise erhalten Sie Namen für alle Zeilen in einer Tabelle. Dabei steht [Spaltenname] für eine ganzzahlige Spalte mit den numerischen Werten 1 bis 12
2 stellt eine beliebige Ganzzahl dar. Durch Kontaktzeichenfolge habe ich ein Datum erstellt, an dem ich den Monat extrahieren kann. '/ 1/2011' kann ein beliebiges Datum sein
wenn Sie dies mit Variable tun möchten
DECLARE @integer int;
SET @integer = 6;
SELECT DATENAME(m, str(@integer) + '/1/2011')
Verwenden Sie diese Anweisung, um den numerischen Wert des Monats in den Namen des Monats umzuwandeln.
SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
In einigen Regionen wie Hebräisch gibt es Schaltmonate , die vom Jahr abhängen. Um Fehler in solchen Regionen zu vermeiden, sollten Sie die folgende Lösung in Betracht ziehen:
SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')
Ab SQL Server 2012 können Sie FORMAT und DATEFROMPARTS verwenden , um dieses Problem zu lösen. (Wenn Sie möchten , Monatsnamen aus anderen Kulturen, ändern: en-US
)
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
Wenn Sie einen Monat mit drei Buchstaben wünschen:
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')
Wenn Sie wirklich wollen, können Sie eine Funktion dafür erstellen:
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
Subtrahieren Sie einfach den aktuellen Monat vom heutigen Datum und addieren Sie dann Ihre Monatsnummer zurück. Verwenden Sie dann die Dateinamenfunktion, um den vollständigen Namen in einer Zeile anzugeben.
print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
Dieser hat für mich gearbeitet:
@MetricMonthNumber (some number)
SELECT
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName
Aus einem Beitrag oben von @leoinfo und @Valentino Vranken. Habe gerade eine schnelle Auswahl getroffen und es funktioniert.
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
Erklärung:
MonthNumber
DatePart
die Monatsnummer zurückgegeben wirdIch arbeite für mich
SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
Sie können das Datum so erhalten. zB: - Benutzertabelle
id name created_at
1 abc 2017-09-16
2 xyz 2017-06-10
Sie können den Monatsnamen so erhalten
select year(created_at), monthname(created_at) from users;
Ausgabe
+-----------+-------------------------------+
| year(created_at) | monthname(created_at) |
+-----------+-------------------------------+
| 2017 | september |
| 2017 | june |
Verwenden Sie diese Anweisung, um den Monatsnamen abzurufen:
DECLARE @date datetime
SET @date='2015/1/4 00:00:00'
SELECT CAST(DATENAME(month,@date ) AS CHAR(3))AS 'Month Name'
Dies gibt Ihnen einen kurzen Monatsnamen. So: Jan, Feb, Mar usw.
Hier ist meine Lösung, bei der einige Informationen von anderen verwendet werden, um ein Problem zu lösen.
datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname
In SQL Server gibt es keine systemdefinierte Funktion. Sie können jedoch Ihre eigene benutzerdefinierte Funktion erstellen - eine Skalarfunktion. Sie finden Skalarfunktionen im Objekt-Explorer für Ihre Datenbank: Programmierbarkeit-> Funktionen-> Skalarwertfunktionen. Unten verwende ich eine Tabellenvariable, um alles zusammenzuführen.
--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]
Sie können eine solche Funktion erstellen, um den Monat zu generieren und SELECT dbo.fn_GetMonthFromDate (date_column) als Month FROM table_name auszuführen
/****** 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
Am einfachsten ist es, die Funktion aufzurufen MONTHNAME(your_date)
. Ihr_Datum kann ein statischer Wert oder der Wert aus einem Ihrer Tabellenfelder sein.
SELECT MONTHNAME (concat ('1970 -', [Month int val], '- 01'))
Beispiel - SELECT MONTHNAME (concat ('1970 -', 4, '- 01'))
Antwort - April