Nur Monat und Jahr von SQL DATE abrufen

133

Ich muss nur auf das Feld Month.Year from Date in SQL Server zugreifen.

user160820
quelle

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

MatBailie
quelle
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)
Lucas Ayala
quelle
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)
Adriaan Stander
quelle
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'

Valya Sylevych
quelle
15

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

Weitere Informationen finden Sie in der verknüpften Dokumentation.

Grzegorz Gierlik
quelle
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);
Kein Name
quelle
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.

Philippe Grondier
quelle
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
razvangry
quelle
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,'')
priyanka.sarkar
quelle
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>
Ibo
quelle
4
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
Valya Sylevych
quelle
3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

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

Mike
quelle
2

Versuche dies

select to_char(DATEFIELD,'MON') from YOUR_TABLE

z.B.

select to_char(sysdate, 'MON') from dual
Amin
quelle
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

Pedro
quelle
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'

N. Haut
quelle
1

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

Sandwich
quelle
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

Mobfire
quelle
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))
JIYAUL MUSTAPHA
quelle
0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Ausgabe: März 2019

Amit Jaiswal
quelle
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
Deepak Tambe
quelle
0

Für Ergebnis: "JJJJ-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
Jelena Lazarevic
quelle
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

Hasan Junaid Hashmi
quelle
0

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

Ausgabe: 5.2020

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

Ausgabe: Mai 2020

Dinesh Gaud
quelle