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?

Neeraj
quelle
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.

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

Prad9
quelle
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.

RichardTheKiwi
quelle
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.

Anna-leny
quelle
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) 
A. Goutam
quelle
Wo werde ich das Bestelldatum meines Spaltennamens eintragen?
Abdullah
10

Für 2008 ältere Version :

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

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

Stefan Steiger
quelle
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)
Ram Pratap
quelle
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())  )
RollRoll
quelle
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)

Simon Alphonse
quelle
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'
Arvind Kumar
quelle
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

Naveed Yousaf
quelle
0

In PLSQL können Sie verwenden

to_char(SYSDATE,'dd/mm/yyyy')
Morterox
quelle
Ü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)
user4162468
quelle
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())
TMP ByKIS
quelle
0

Versuche dies.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
Ram Pratap
quelle