Nur Monat und Jahr von SQL DATE abrufen


Antworten:


170

Neben den bereits gegebenen Vorschlägen gibt es noch eine weitere Möglichkeit, die ich aus Ihrer Frage ableiten kann:
- Sie möchten immer noch, dass das Ergebnis ein Datum ist.
- Aber Sie möchten die Tage, Stunden usw. "verwerfen".
- Ein Jahr / Monat verlassen nur Datumsfeld

SELECT
   DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
FROM
   <your_table>

Dadurch wird die Anzahl der ganzen Monate ab einem Basisdatum (0) ermittelt und zu diesem Basisdatum hinzugefügt. Runden Sie also auf den Monat ab, in dem das Datum liegt.

ANMERKUNG: In SQL Server 2008 ist die ZEIT weiterhin als 00: 00: 00.000 angehängt. Dies entspricht nicht genau dem "Entfernen" einer Notation von Tag und Uhrzeit insgesamt. Auch der Tag ist auf den ersten eingestellt. zB 2009-10-01 00: 00: 00.000


1
Das hat bei mir überhaupt nicht funktioniert. Es gibt mir 2023-02-01 00: 00: 00.000 als Ergebnis.
Dss

1
@dss - mit welchen Parametern? Zeigen Sie die aktuelle SQL und ich freue mich, einen Blick darauf zu werfen.
MatBailie

@MatBailie SELECT DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products where productID = 123 Die Spalte "LastSaleDate" wird als "(datetime, not null)" deklariert und ich erhalte: 2014-09-01 00: 00: 00.000
Dss

1
@DSS - Ja, das scheint richtig zu sein. Es wird bis Anfang September 2014 abgerundet. Es gibt keinen Datentyp "Nur Jahr und Monat", daher ist die Verwendung des ersten Moments eines jeden Monats die Standardpraxis. Wenn Sie diesen DATETIME-Wert in eine Zeichenfolge konvertieren (Anwendungsebene, Präsentationsschicht, Berichtsebene usw.), können Sie ihn jederzeit nur mit den Teilen Jahr und Monat formatieren. In Bezug auf die Datenmanipulation "in der Datenbank" ist dies jedoch korrekt.
MatBailie

Ich denke, vielleicht, weil Ihre Antwort mit einem "Datum" -Feld verwendet werden sollte, aber ich ein "Datum / Uhrzeit" -Feld verwende, also ist das wahrscheinlich das Problem.
Dss

133
select month(dateField), year(dateField)

2
großartig! Sie können sie mit einer Spalte verbinden: 'Wählen Sie cast (month (dateField) als varchar) +'. ' + Besetzung (Jahr (dateField) als varchar) '
izik f


32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)

2
SELECT DATEPART (MM, DateVal) gibt nicht 'MM' zurück. Es wird nur eine einstellige Zahl zurückgegeben, wenn der Monat zwischen 1 und 9 liegt.
Jaikrat

Anstelle von "MM" sollte "Monat" stehen: 'SELECT DATEPART (month, getdate ())'
Renne007

17
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear

Die Ausgabe sieht folgendermaßen aus: 'Dezember 2013'


15

Es gibt zwei SQL-Funktionen, um dies zu tun:

Weitere Informationen finden Sie in der verknüpften Dokumentation.


5
Ich würde vorschlagen, zumindest einige kurze Beispiele zu nennen, da Links nicht immer für immer bleiben ... Tatsächlich sind sie nicht mehr gut.
Carol

12

Dies kann ebenfalls hilfreich sein.

SELECT YEAR(0), MONTH(0), DAY(0);

oder

SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());

oder

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);

Wie auch immer, um die "0" im Rückgabefeld nicht zu entfernen?
Si8

11

Schreiben wir es so: YEAR(anySqlDate)und MONTH(anySqlDate). Versuchen Sie es YEAR(GETDATE())zum Beispiel mit.


10
convert(varchar(7), <date_field>, 120)
because 120 results in 'yyyy-MM-dd' which is varchar(10)
using varchar(7) will display only year and month

example:
select convert(varchar(7), <date_field>, 120), COUNT(*)
from <some_table>
group by convert(varchar(7), <date_field>, 120)
order by 1

6

Ich interpretiere Ihre Frage auf zwei Arten.

a) Sie brauchen Monat und Jahr nur getrennt. In diesem Fall ist hier die Antwort

select 
        [YEAR] = YEAR(getdate())
        ,[YEAR] = DATEPART(YY,getdate())
        , [MONTH] = month(getdate())
        ,[MONTH] = DATEPART(mm,getdate())
        ,[MONTH NAME] = DATENAME(mm, getdate()) 

b)

Sie möchten ab einem bestimmten Datum beispielsweise '2009-11-24 09:01:55.483'im Format MONTH.YEAR anzeigen . Die Ausgabe sollte also als kommen11.2009 in diesem Fall erfolgen.

Wenn dies der Fall sein soll, versuchen Sie dies (unter anderem)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')

5

Einige der Datenbanken unterstützen die Funktionen möglicherweise nicht MS ACCESSoder RODBCnicht SQL SERVER, aber für jede Datenbank mit dieser FORMATFunktion können Sie einfach Folgendes tun:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>


3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

gibt Ihnen zB 201601, wenn Sie ein sechsstelliges Ergebnis wünschen


2

Versuche dies

select to_char(DATEFIELD,'MON') from YOUR_TABLE

z.B.

select to_char(sysdate, 'MON') from dual

2

Versuche dies:

Portugiesisch

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)

Ergebnis: maio 2019


Englisch

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)

Ergebnis: Mai 2019

Wenn Sie in einer anderen Sprache möchten, ändern Sie " pt-pt " oder " en-US " in einen dieser Links


1

Ich hatte eine spezielle Anforderung, etwas Ähnliches zu tun, wo es Monat-Jahr anzeigt, was wie folgt getan werden kann:

SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'

In meinem speziellen Fall musste ich es auf die dreistellige Monatsabkürzung mit einem zweistelligen Jahr reduzieren, die ungefähr so ​​aussah: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'


1

Versuchen SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;


0

Meine Datenbank unterstützt die meisten der oben genannten Funktionen nicht, ich habe jedoch festgestellt, dass dies funktioniert:

SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;

beispielsweise: SELECT SUBSTR(created, 1,7) FROM table;

gibt das Jahr und den Monat im Format "JJJJ-MM" zurück


0

Holen Sie sich Monat und Jahr vom Datum

DECLARE @lcMonth nvarchar(10)
DECLARE @lcYear nvarchar(10)

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))

0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Ausgabe: März 2019


0

Abfrage: - Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

Ausgabe: - Januar 2019

allgemeines Datumsfeld, das wir verwenden können

datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName

0

Für Ergebnis: "JJJJ-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)

0
select convert(varchar(11), transfer_date, 106) 

Ich habe mein gewünschtes Ergebnis des Datums als 07. März 2018 formatiert

Meine Spalte 'transfer_date' ist eine Spalte vom Typ datetime und ich verwende SQL Server 2017 unter Azure


0

Wählen Sie CONCAT (MONTH (GETDATE ()), '.', YEAR (GETDATE ()).

Ausgabe: 5.2020

Wählen Sie CONCAT (DATENAME (MONTH, GETDATE ()), '.', YEAR (GETDATE ()).

Ausgabe: Mai 2020

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.