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?


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)

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)?


12

Veränderung:

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

Zu:

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

Ich denke du meinst DATENAME. DATEPARTwürde es nicht tun.
Druide


2

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


2

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


1

Dies gibt Ihnen, was Sie verlangen:

select convert(varchar(3),datename(month, S0.OrderDateTime)) 

1
SELECT MONTHNAME( `col1` ) FROM `table_name` 

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

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)

0
DECLARE @iMonth INT=12
SELECT CHOOSE(@iMonth,'JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER')
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.