web-dev-qa-db-de.com

Konvertieren Sie die Monatsnummer in die Monatsnamensfunktion in SQL

Ich habe Monate in SQL Server als 1,2,3,4, ... 12 gespeichert. Ich möchte sie als Januar, Februar usw. anzeigen. Gibt es in SQL Server eine Funktion wie MonthName (1) = Januar? Ich versuche, eine CASE-Anweisung möglichst zu vermeiden.

193
Saif Khan

Ein bisschen hackig aber sollte funktionieren:

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

Ich denke, das 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 ) )
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

Verwenden Sie den besten Weg  

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

Es ist sehr einfach.

select DATENAME(month, getdate())

ausgabe: Januar

20
Saeed ur Rehman

Folgendes funktioniert für mich:

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

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 Ganzzahlspalte 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 du das mit variable machen willst

DECLARE @integer int;

SET @integer = 6;

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

Verwenden Sie diese Anweisung, um den numerischen Monatswert in den Monatsnamen umzuwandeln.

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

Sie können die eingebaute CONVERT-Funktion verwenden

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

Dies zeigt die ersten 3 Zeichen des Monats (JAN, FEB usw.) an.

4
Tagore Peethala

In einigen Gebieten wie Hebräisch gibt es Schaltmonate abhängig vom Jahr. Um Fehler in solchen Gebieten zu vermeiden, sollten Sie die folgende Lösung in Betracht ziehen:

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

Sie können die Konvertierungsfunktion wie folgt verwenden

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

Sicher, das wird funktionieren

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

Subtrahieren Sie einfach den aktuellen Monat vom heutigen Datum und fügen Sie dann Ihre Monatsnummer zurück. Verwenden Sie dann die Funktion datename, um den vollständigen Namen in einer Zeile anzugeben.

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

Um die Monatszahl in einen Monatsnamen umzuwandeln, versuchen Sie es mit dem folgenden

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

ich denke, das ist genug, um einen Monatsnamen zu erhalten, wenn Sie ein Datum haben.

SELECT DATENAME(month ,GETDATE())
2
Benazir

Arbeit für mich

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

OR

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

sie können das Datum so erhalten. zB: - Benutzer Tabelle

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

sie können den Monthnamen so bekommen

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

ausgabe

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

Ab SQL Server 2012 können Sie das -FORMAT und DATEFROMPARTS verwenden, um dieses Problem zu lösen. (Wenn Sie Monatsnamen aus anderen Kulturen wünschen, ändern Sie: 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 dazu eine Funktion 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
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 )

Erklärung:

  1. Erste Decalre-Variable MonthNumber
  2. Aktuellen Monat für DatePart abrufen, der die Monatsnummer zurückgibt
  3. Name des Rückgabemonats der dritten Abfrage
1
Wafa Abbas

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 von @leoinfo und @Valentino Vranken. Ich habe nur eine schnelle Auswahl getroffen und es funktioniert. 

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

Der einfachste Weg ist der Aufruf der Funktion MONTHNAME(your_date). your_date kann ein statischer Wert oder der Wert aus einem Ihrer Tabellenfelder sein.

Es gibt keine systemdefinierte Funktion im SQL Server. Sie können jedoch Ihre eigene benutzerdefinierte Funktion erstellen - eine Skalarfunktion. Skalarfunktionen finden Sie im Objekt-Explorer für Ihre Datenbank: Programmierbarkeit-> Funktionen-> Skalarwertfunktionen. Im Folgenden 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]
0
Charlie Brown

Hier ist meine Lösung mit einigen Informationen anderer, um ein Problem zu lösen.

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

Sie können eine Funktion wie diese erstellen, um den Monat und den do zu generieren.


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

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.

0
user4972370