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?


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.


À 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


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.


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.


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) 

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)


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


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)

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())  )

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)


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'

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


0

Dans PLSQL, vous pouvez utiliser

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

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)

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())

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.