Rückgabe des Monatsnamens in der SQL Server-Abfrage

81

Mit habe SQL Server 2008ich eine Abfrage, mit der eine Ansicht erstellt wird, und ich versuche, anstelle einer Ganzzahl den Namen eines Monats anzuzeigen .

In meiner Datenbank befindet sich das datetimein einer Spalte namens OrderDateTime. Die Zeilen in der Abfrage, die das Datum zurückgeben, lauten:

DATENAME(yyyy, S0.OrderDateTime) AS OrderYear,
DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth

Dies gibt eine Spalte von Jahren und eine Spalte von Monaten als Ganzzahlen zurück. Ich möchte die Monatsnamen zurückgeben (Jan, Feb, etc. Ich habe es versucht:

CONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth

Das ist offensichtlich falsch, wie ich bekomme

Falsche Syntax in der Nähe von 'AS'

Botschaft. Was ist die richtige Syntax für meine Abfrage?

Casey DiBroaggio
quelle
8
Die falsche ASCONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime)) AS OrderMonth
Syntaxmeldung
Was bedeutet S0 in der SQL-Abfrage
user7157710
@ user7157710 S0 ist der Alias ​​für die Tabelle, in der sich das Feld befindet.
Tia97

Antworten:

154

Dadurch erhalten Sie den vollständigen Namen des Monats.

select datename(month, S0.OrderDateTime)

Wenn Sie nur die ersten drei Buchstaben möchten, können Sie dies verwenden

select convert(char(3), S0.OrderDateTime, 0)
Mikael Eriksson
quelle
Kommentar falsch gepostet in Antwort "Was bedeutet S0 in der SQL-Abfrage?" von user7157710
Petter Friberg
1
S0 ist ein Alias ​​für eine Tabelle. Die Antwort überträgt es von der Frage.
Bpainter
Ich möchte hinzufügen, dass Sie diese Funktionen normalerweise nicht einmal verwenden möchten. Wählen Sie das Datum besser als Datum (Uhrzeit) oder Monat als Ganzzahl oder was auch immer aus und lassen Sie dann Ihre Benutzeroberfläche dafür sorgen, dass es in einen menschenfreundlichen Monatsnamen konvertiert wird. Auf diese Weise kann sich Ihre Anwendung / Benutzeroberfläche eher um die Lokalisierung als um Ihre Datenbank kümmern, die nicht den geringsten Hinweis auf die Einstellungen Ihres Benutzers oder die Einstellungen der Anwendung für die Lokalisierung hat. Um es anders auszudrücken: Stellen Sie sich Folgendes vor: Was ist, wenn Ihr Benutzer das chinesische 二月 gegenüber dem Februar bevorzugt?
RobIII
18

Hast du es versucht DATENAME(MONTH, S0.OrderDateTime)?

Nithins
quelle
12

Veränderung:

CONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth

Zu:

CONVERT(varchar(3), DATENAME(MONTH, S0.OrderDateTime)) AS OrderMonth
Jim Harris
quelle
Ich denke du meinst DATENAME. DATEPARTwürde es nicht tun.
Druide
7

Versuche dies:

SELECT LEFT(DATENAME(MONTH,Getdate()),3)
Jeyaprakash
quelle
2

Wählen Sie SUBSTRING (convert(varchar,S0.OrderDateTime,100),1,3)aus Ihrem Tabellennamen

Dilip Chauhan
quelle
2

In SQL Server 2012 ist die Verwendung möglich FORMAT(@mydate, 'MMMM') AS MonthName

Marlon Taborda
quelle
1

Dies gibt Ihnen, was Sie verlangen:

select convert(varchar(3),datename(month, S0.OrderDateTime)) 
Bamidelz
quelle
1
SELECT MONTHNAME( `col1` ) FROM `table_name` 
Alvin
quelle
0

Ohne db zu treffen, können wir alle Monatsnamen abrufen.

WITH CTE_Sample1 AS
(
    Select 0 as MonthNumber

    UNION ALL

    select MonthNumber+1 FROM CTE_Sample1
        WHERE MonthNumber+1<12
)

Select DateName( month , DateAdd( month , MonthNumber ,0 ) ) from CTE_Sample1
Mou
quelle
0

im Grunde das ...

declare @currentdate datetime = getdate()
select left(datename(month,DATEADD(MONTH, -1, GETDATE())),3)
union all
select left(datename(month,(DATEADD(MONTH, -2, GETDATE()))),3)
union all
select left(datename(month,(DATEADD(MONTH, -3, GETDATE()))),3)
Stummel
quelle
0
DECLARE @iMonth INT=12
SELECT CHOOSE(@iMonth,'JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER')
Natarajan Sambantham
quelle