Comment sélectionner une date sans heure dans SQL

257

Lorsque je sélectionne la date dans SQL, elle est renvoyée comme 2011-02-25 21:17:33.933. Mais je n'ai besoin que de la partie Date, bien sûr 2011-02-25. Comment puis-je faire ceci?

Neeraj
la source
4
Je suppose qu'il veut une chaîne, et donc elle n'est pas dupliquée
bernd_k
@TylerH existe-t-il un moyen d'obtenir le 2011-02-25 00: 00: 00.000 au lieu de l'heure actuelle?
Thrainder

Réponses:

148

Je suppose qu'il veut une chaîne.

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

120 ici indique la fonction de conversion que nous passons la date d'entrée dans le format suivant : yyyy-mm-dd hh:mi:ss.

bernd_k
la source
À quoi sert 120?
Павле
@ Павле référer cet article Styles de date et d'heure
Fox Vĩnh Tâm
j'ai utilisé cette conversion sélectionnée (varchar (10), APPROVED_DATE, 120), j'ai obtenu la colonne d'erreur APPROVED_DATE datetime, comment vais-je la convertir? erreur L'identifiant en plusieurs parties "LAB_RESULTS.APPROVED_DATE" n'a pas pu être lié.
Abdullah
531

Pour SQL Server 2008:

Convert(date, getdate())  

Veuillez vous référer à https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql

Prad9
la source
6
J'obtiens "Type date n'est pas un type de système défini."
SeaDrive
10
DATEest nouveau en 2008.
Tim Schmelter
33
Je n'ai aucune idée pourquoi c'est une réponse si positive. cette question concerne SQL Server 2005, PAS 2008. 2005 n'a pas le datetype de données, ce qui rend cette solution non valide.
Joshua Burns
84
C'est voté parce que les gens viennent chercher des solutions à leur problème, pas les auteurs. Donc, si 110 personnes ont trouvé que cela fonctionnait pour eux, je pense qu'il est juste qu'il ait 110 votes positifs.
James
J'ai la même erreur lorsque j'utilise select convert (table.order_date, getdate ()); SQL Server version 2017, l'erreur (la date de type n'est pas un type de système défini) le type de colonne datetime
Abdullah
57

Le plus rapide est datediff, par exemple

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

Mais si vous avez seulement besoin d'utiliser la valeur, vous pouvez ignorer le dateadd, par exemple

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

où l'expression datediff(d, 0, getdate())est suffisante pour renvoyer la date du jour sans partie d'heure.

RichardTheKiwi
la source
Oldie mais goodie, a utilisé cette astuce des dizaines de fois dans les anciennes bases de données 2000/2005.
KeithS
43

Utilisez CAST (GETDATE () comme date) qui a fonctionné pour moi, simple.

Anna-leny
la source
où ajouter le nom de ma colonne? sélectionnez cast (getdate () as date, order_date)?
Abdullah
@AbdullahCAST(order_date AS DATE)
Andrew Morton
12

vous pouvez utiliser comme ça

SELECT Convert(varchar(10), GETDATE(),120) 
A.Goutam
la source
où je mettrai la date de commande du nom de ma colonne?
Abdullah
10

Pour l' ancienne version 2008 :

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

Domcha
la source
applaudissements pour cela! Les autres solutions ne reposent que sur la partie varchar (10), qui tronque juste la valeur.
Gonza Oviedo du
2

Il est un peu tard, mais utilisez la fonction "curdate" ODBC (les crochets angulaires 'fn' est la séquence d'échappement de la fonction ODBC).

SELECT {fn curdate()} 

Production: 2013-02-01

Stefan Steiger
la source
4
Je suis honnêtement curieux de savoir comment vous pensez que votre réponse est meilleure que la réponse acceptée. Ou où vous vous référez peut-être aux autres réponses?
Mikael Eriksson, du
1
@Mikael Eriksson: Hmm, car les fonctions ODBC sont des fonctions canoniques et donc indexables, contrairement aux fonctions non déterministes de SQL-Server. Mais peu importe, ce n'est qu'un problème de mise à l'échelle lorsque vous passez de vos 3 entrées en test aux entrées 1 * 10E6 en production, vous n'avez aucun problème pendant le développement;)
Stefan Steiger
8
Si vous exécutez cette requête SELECT {fn curdate()} FROM (SELECT 1) AS T(X)et regardez le plan d'exécution réel (version xml), vous verrez que ce qui est réellement exécuté l'est CONVERT(varchar(10),getdate(),23). Ainsi, le type de données de cette fonction ODBC est varchar(10)ce qui signifie que si vous voulez comparer le résultat avec un, datetimevous obtiendrez une conversion implicite de varchar(10)en datetimesur une chaîne yyyy-mm-dd. Cette conversion implicite échouera avec set dateformat dmy.
Mikael Eriksson
1
@Mikael Eriksson: On dirait un bug, ils devraient utiliser SELECT CONVERT (char (8), GETDATE (), 112) à la place.
Stefan Steiger
"fonctions canoniques et donc indexables, contrairement aux fonctions SQL non serveur déterministes" - euh, quoi?
Martin Smith
2

Vous pouvez également essayer celui-ci.

SELECT CONVERT(DATE, GETDATE(), 120)
Ram Pratap
la source
2

Reconvertissez-le en datetime après la conversion en date afin de conserver le même datatime si nécessaire

select Convert(datetime, Convert(date, getdate())  )
RollRoll
la source
2

Si vous avez besoin de temps pour être des zéros comme 2018-01-17 00:00:00.000:

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

Simon Alphonse
la source
Merci, c'est ce que je cherchais.
Pratik Ghag
1

L'utilisation est simple:

convert(date, Btch_Time)

Exemple ci-dessous:

Table:

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
la source
1

C'est trop tard, mais le suivi a bien fonctionné pour moi

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Lorsque le type de données est la date, les heures seraient tronquées

Naveed Yousaf
la source
0

Dans PLSQL, vous pouvez utiliser

to_char(SYSDATE,'dd/mm/yyyy')
Morterox
la source
envisagez de le transférer dans un commentaire.
xlembouras
Cette question concerne SQL Server ... pas Oracle
Ben
0

Convertissez d'abord la date en float (qui affiche le numérique), puis ROUNDle numérique en 0 décimal, puis convertissez-le en datetime.

convert(datetime,round(convert(float,orderdate,101),0) ,101)
user4162468
la source
0

Si vous souhaitez renvoyer un type de date comme une simple utilisation de date

CONVERT(date, SYSDATETIME())

ou

SELECT CONVERT(date,SYSDATETIME()) 

ou

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())
TMP ByKIS
la source
0

Essaye ça.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
Ram Pratap
la source