So wählen Sie in SQL Datum ohne Uhrzeit aus


257

Wenn ich in SQL ein Datum auswähle, wird es als zurückgegeben 2011-02-25 21:17:33.933. Aber ich brauche nur den Datumsteil, das heißt 2011-02-25. Wie kann ich das machen?


4
Ich denke, er will einen String, und deshalb ist er nicht dupliziert
bernd_k


@ TylerH Gibt es eine Möglichkeit, 2011-02-25 00: 00: 00.000 anstelle der aktuellen Zeit zu erhalten?
Thrainder

Antworten:


148

Ich denke, er will eine Schnur.

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

120 teilt hier der Konvertierungsfunktion mit, dass wir das Eingabedatum im folgenden Format übergeben : yyyy-mm-dd hh:mi:ss.


Wofür ist 120?
20авле

@ Referавле beziehen sich auf diesen Artikel Datums- und Zeitstile
Fox Vĩnh Tâm

Ich habe diese Auswahlkonvertierung verwendet (varchar (10), APPROVED_DATE, 120). Ich habe die Fehlerspalte APPROVED_DATE datetime. Wie werde ich sie konvertieren? Fehler Die mehrteilige Kennung "LAB_RESULTS.APPROVED_DATE" konnte nicht gebunden werden.
Abdullah

530

Für SQL Server 2008:

Convert(date, getdate())  

Weitere Informationen finden Sie unter https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql


6
Ich erhalte die Meldung "Typdatum ist kein definierter Systemtyp."
SeaDrive

10
DATEist neu in 2008.
Tim Schmelter

33
Ich habe keine Ahnung, warum dies eine so positive Antwort ist. Diese Frage bezieht sich auf SQL Server 2005, NICHT auf 2008. 2005 hat nicht den dateDatentyp, sodass diese Lösung ungültig wird.
Joshua Burns

84
Es ist positiv bewertet, weil die Leute nach Lösungen für ihr Problem suchen, nicht die Autoren. Wenn also 110 Leute fanden, dass dies für sie funktioniert, finde ich es fair, dass es 110 positive Stimmen hat.
James

Ich habe den gleichen Fehler, wenn ich select convert (table.order_date, getdate ()) verwende; SQL Server Version 2017, der Fehler (Typ Datum ist kein definierter Systemtyp) der Spaltentyp Datum / Uhrzeit
Abdullah

57

Das schnellste ist datediffz

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl

Wenn Sie jedoch nur den Wert verwenden müssen, können Sie das Datum überspringen, z

select ...
WHERE somedate <= datediff(d, 0, getdate())

wobei der Ausdruck datediff(d, 0, getdate())ausreicht, um das heutige Datum ohne Zeitanteil zurückzugeben.


Oldie but goodie, hat diesen Trick Dutzende Male in älteren DBs von 2000/2005 verwendet.
KeithS

43

Verwenden Sie CAST (GETDATE () als Datum), das für mich einfach funktioniert hat.


Wo werde ich meinen Spaltennamen hinzufügen? Besetzung auswählen (getdate () als Datum, order_date)?
Abdullah

@AbdullahCAST(order_date AS DATE)
Andrew Morton


12

Sie können so verwenden

SELECT Convert(varchar(10), GETDATE(),120) 

Wo werde ich das Bestelldatum meines Spaltennamens eintragen?
Abdullah

10

Für 2008 ältere Version :

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)


Applaus dafür! Die anderen Lösungen basieren nur auf dem varchar (10) -Teil, der den Wert nur abschneidet.
Gonza Oviedo

2

Es ist etwas spät, aber verwenden Sie die ODBC-Funktion "curdate" (spitze Klammern 'fn' ist die Escape-Sequenz der ODBC-Funktion).

SELECT {fn curdate()} 

Ausgabe: 2013-02-01


4
Ich bin ehrlich neugierig, wie Sie denken, dass Ihre Antwort besser ist als die akzeptierte Antwort. Oder wo beziehen Sie sich vielleicht auf die anderen Antworten?
Mikael Eriksson

1
@Mikael Eriksson: Hmm, weil ODBC-Funktionen im Gegensatz zu den nichtdeterministischen SQL-Server-Funktionen kanonische Funktionen sind und daher indizierbar sind. Aber egal, es ist nur ein Skalierungsproblem, wenn Sie von Ihren 3 Einträgen im Test zu den 1 * 10E6-Einträgen in der Produktion wechseln, bekommen Sie keine Probleme während der Entwicklung;)
Stefan Steiger

8
Wenn Sie diese Abfrage ausführen SELECT {fn curdate()} FROM (SELECT 1) AS T(X)und sich den tatsächlichen Ausführungsplan (XML-Version) ansehen, werden Sie feststellen, dass tatsächlich ausgeführt wird CONVERT(varchar(10),getdate(),23). Der Datentyp dieser ODBC-Funktion ist varchar(10)also, dass Sie, wenn Sie das Ergebnis mit einem vergleichen möchten datetime, eine implizite Konvertierung von varchar(10)zu datetimein eine Zeichenfolge erhalten yyyy-mm-dd. Diese implizite Konvertierung schlägt mit fehl set dateformat dmy.
Mikael Eriksson

1
@Mikael Eriksson: Sieht aus wie ein Fehler, sie sollten stattdessen SELECT CONVERT (char (8), GETDATE (), 112) verwenden.
Stefan Steiger

"Kanonische Funktionen und daher indizierbar, im Gegensatz zu den nichtdeterministischen SQL-Server-Funktionen" - ähm, was?
Martin Smith

2

Sie können diesen auch versuchen.

SELECT CONVERT(DATE, GETDATE(), 120)

2

Konvertieren Sie es nach der Konvertierung in Datum wieder in Datum / Uhrzeit, um bei Bedarf dieselbe Datenzeit beizubehalten

select Convert(datetime, Convert(date, getdate())  )

2

Für den Fall, dass Sie die Zeit brauchen, um Nullen zu sein, wie 2018-01-17 00:00:00.000:

SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 121)


Danke, das war es, wonach ich gesucht habe.
Pratik Ghag

1

Die Verwendung ist einfach:

convert(date, Btch_Time)

Beispiel unten:

Tabelle:

Efft_d       Loan_I  Loan_Purp_Type_C   Orig_LTV    Curr_LTV    Schd_LTV    Un_drwn_Bal_a      Btch_Time            Strm_I  Btch_Ins_I
2014-05-31  200312500   HL03             NULL         1.0000    1.0000         1.0000      2014-06-17 11:10:57.330  1005    24851e0a-53983699-14b4-69109


Select * from helios.dbo.CBA_SRD_Loan where Loan_I in ('200312500') and convert(date, Btch_Time) = '2014-06-17'

1

Es ist zu spät, aber das Folgen hat bei mir gut funktioniert

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Wenn der Datentyp Datum ist, werden die Stunden abgeschnitten


0

In PLSQL können Sie verwenden

to_char(SYSDATE,'dd/mm/yyyy')

Überlegen Sie, dies auf einen Kommentar zu übertragen.
Xlembouras

Diese Frage betrifft SQL Server ... nicht Oracle
Ben

0

Konvertieren Sie zuerst das Datum in Gleitkomma (das die ROUNDZahl anzeigt), dann die Zahl in 0 Dezimalstellen und konvertieren Sie diese dann in Datum / Uhrzeit.

convert(datetime,round(convert(float,orderdate,101),0) ,101)

0

Wenn Sie einen Datumstyp nur als Datum zurückgeben möchten, verwenden Sie

CONVERT(date, SYSDATETIME())

oder

SELECT CONVERT(date,SYSDATETIME()) 

oder

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())

0

Versuche dies.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
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.