Konvertieren Sie eine SQL Server-Datums- und Uhrzeitangabe in ein kürzeres Datumsformat


82

Ich habe eine datetimeSpalte in SQL Server, die mir solche Daten liefert, 10/27/2010 12:57:49 pmund ich möchte diese Spalte abfragen, aber SQL Server muss nur den Tag Monat und Jahr zurückgeben - z. 2010 10 27oder sowas ähnliches.

Welche Funktionen sollte ich erforschen?

Sollte ich versuchen, in einen anderen Datumsdatentyp zu konvertieren? Oder einfach in einen String konvertieren?


2
Schauen Sie sich diesen Artikel an: msdn.microsoft.com/en-us/library/ms187928.aspx Speziell> Datums- und
Zeitstile

6
Welche Version von SQL Server? SQL Server 2008 hat eine Reihe neuer datums- und zeitbezogener Datentypen eingeführt, z. B. DATE- wenn Sie also 2008 verwenden, können SELECT CAST(YourDateTimeColumn AS DATE)Sie nur das Datum verwenden und erhalten nur den Zeitabschnitt zurück.
marc_s


Antworten:


121

Schauen Sie sich CONVERT an . Der dritte Parameter ist der Datums- und Uhrzeitstil, in den Sie konvertieren möchten.

z.B

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

12
Es scheint, dass 106 "TT Mon JJ" und "TT / MM / JJJJ" 103 ist
Nahab

3
@nahab Du bist richtig. Außerdem musste ich varchar (11) anstelle von varchar (10) verwenden, um zu verhindern, dass das Jahr verkürzt wird (z. B. sah ich 195 anstelle von 1953)
Henrov

6
Sie können auch 101 verwenden, wenn Sie möchten, dass die Ergebnisse in MM / TT / JJJJ
iliketocode

57

Versuche dies:

print cast(getdate() as date )


5
Ich mag diese Option mehr als die akzeptierte Antwort. Es verlässt die Spalte in einem Datumsformat, so dass meine 'Bestellung von' korrekt funktioniert und nicht nur ein Varchar.
Milne

2
Dies funktioniert unter SQL Server 2005 und früheren Versionen nicht. Der Datentyp DATE wurde mit SQL 2008 eingeführt.
JerryOL

Wie oben erwähnt, ist es zwar schön, einen Datumsdatentyp zu erhalten, aber wenn ein bestimmtes Format erwartet wird (wie "TT MM JJJJ"), wird mehr benötigt.
Trincot

15

Wenn Sie das Ergebnis in einem Datumsformat benötigen, können Sie Folgendes verwenden:

Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

10

Wenn Sie SQL Server 2008 verwenden, können Sie zusätzlich zu CAST und CONVERT in einen Datumstyp konvertieren (oder diesen Typ zunächst verwenden) und dann optional erneut in einen Varchar konvertieren:

declare @myDate date
set @myDate = getdate()
print cast(@myDate as varchar(10))

Ausgabe:

2012-01-17

6

Mit SQL Server 2005 würde ich Folgendes verwenden:

select replace(convert(char(10),getdate(),102),'.',' ')

Ergebnisse: 2015 03 05


5

Wenn Sie ein Datum / Uhrzeit- Feld haben, das die folgenden Ergebnisse liefert: 2018-03-30 08: 43: 28.177

Vorgeschlagen: und Sie wollen das ändern Datumzeit auf Datum 2018.03.30 erscheinen wie

cast(YourDateField as Date)

1
Sie haben nichts Neues hinzugefügt, jabu.hlong hat diese Antwort bereits vor 4 Jahren gegeben ...
Pawel Czapski

Es ist nicht garantiert, dass das Datum im OP-Format wiedergegeben wird. Es kann JJJJ-MM-TT, TT / MM / JJJJ, TT / MM / JJJJ 00:00:00 oder noch etwas anderes sein.
Trincot

4

Das kürzeste Datumsformat von MM / TT / JJ kann erhalten werden mit:

Select Convert(varchar(8),getdate(),1)

0

Fügen Sie einfach das Datumsschlüsselwort hinzu. Wählen Sie beispielsweise das Datum (Bestelldatum) aus und zählen Sie (1) aus Bestellungen, bei denen das Bestelldatum> '2014-10-01' nach Datum (Bestelldatum) gruppiert ist.

Bestelldatum ist in Datum Uhrzeit. Diese Abfrage zeigt die Bestellungen für dieses Datum und nicht für die Uhrzeit an.

Das auf eine datetime-Spalte angewendete Date-Schlüsselwort ändert es in ein kurzes Datum.


0

Für alle Versionen von SQL Server: dateadd (dd, dateiff (dd, 0, getdate ()), 0)


Es ist nicht garantiert, dass das Datum im OP-Format wiedergegeben wird. Es könnte JJJJ-MM-TT, TT / MM / JJJJ, TT / MM / JJJJ 00:00:00 oder noch etwas anderes sein.
Trincot

0

Das ursprüngliche DateTime-Feld: [_Date_Time]

Das in Shortdate konvertierte: 'Short_Date'

CONVERT(date, [_Date_Time]) AS 'Short_Date'

Dies gibt einen Datumsdatentyp zurück, der der Schnittstelle zum Rendern als Zeichenfolge überlassen wird, sodass möglicherweise "27/12/2018 00:00:00" erzeugt wird. Das hat das OP nicht verlangt.
Trincot

Dies, was er erreichen wollte - TT / MM / JJJJ; und das, was meine Antwort produziert 2018-11-20
Yousef Albakoush

Zunächst einmal ist 2018-11-20 nicht TT / MM / JJJJ, sondern JJJJ-MM-TT. Das Rendering ist jedoch wirklich system- (und länderspezifisch) abhängig. Auf meinem System werden auch Stunden, Minuten und Sekunden (alle Null) erzeugt. Dies liegt daran, dass Sie SQL nicht mitgeteilt haben, wie das Datum als Zeichenfolge dargestellt werden soll, und das OP ein genaues Zeichenfolgenformat benötigt.
Trincot

Erstens ist der 20.11.2018 darauf zurückzuführen, dass mein PC für die Verwendung in arabischer Sprache konfiguriert ist. Zweitens werde ich es versuchen, nachdem ich das kurze Datum in meinem PC
geändert
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.