SELECT GETDATE()
Retours: 2008-09-22 15:24:13.790
Je veux cette partie de la date sans la partie du temps: 2008-09-22 00:00:00.000
Comment puis-je l'obtenir?
Sur SQL Server 2008
et supérieur, vous devriez CONVERT
à ce jour:
SELECT CONVERT(date, getdate())
Sur les anciennes versions, vous pouvez effectuer les opérations suivantes:
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
par exemple
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
donne moi
2008-09-22 00:00:00.000
Avantages:
varchar
<-> datetime
conversions requiseslocale
SQLServer 2008 a maintenant un type de données 'date' qui ne contient qu'une date sans composant horaire. Toute personne utilisant SQLServer 2008 et au-delà peut effectuer les opérations suivantes:
SELECT CONVERT(date, GETDATE())
Si vous utilisez SQL 2008 et supérieur:
select cast(getdate() as date)
DATEADD et DATEDIFF valent mieux que CONVERTIR en varchar. Les deux requêtes ont le même plan d'exécution, mais les plans d'exécution concernent principalement les stratégies d'accès à data et ne révèlent pas toujours les coûts implicites impliqués dans le temps CPU nécessaire à l'exécution de tous les éléments. Si les deux requêtes sont exécutées sur une table contenant des millions de lignes, le temps processeur à l'aide de DateDiff peut être voisin de 1/3 du temps de conversion du processeur!
Pour voir les plans d'exécution des requêtes:
set showplan_text on
GO
DATEADD et DATEDIFF exécuteront tous deux CONVERT_IMPLICIT.
Bien que la solution CONVERT soit plus simple et plus facile à lire, elle est plus lente est. Il n'est pas nécessaire de reconvertir en date/heure (cela est implicitement fait par le serveur). De plus, la méthode DateDiff n’a pas réellement besoin de DateAdd par la suite, car le résultat entier sera également reconverti implicitement en date-heure.
SELECT CONVERT (varchar, MyDate, 101) FROM DatesTable
|--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
SELECT DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) FROM DatesTable
|--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
L'utilisation de FLOOR () comme suggéré par @digi a des performances plus proches de DateDiff, mais cela n'est pas recommandé, car la conversion du type de données datetime en "float and back" ne génère pas toujours la valeur d'origine.
Rappelez-vous les gars: Ne croyez personne. Regardez les statistiques de performances et testez-les vous-même!
Soyez prudent lorsque vous testez vos résultats. La sélection de nombreuses lignes sur le client masquera la différence de performances car il faut plus de temps pour envoyer les lignes sur le réseau que pour effectuer les calculs. Assurez-vous donc que le travail de toutes les lignes est effectué par le serveur, mais qu'aucun ensemble de lignes n'est envoyé au client.
Il semble y avoir une confusion chez certaines personnes quant au moment où l’optimisation du cache affecte les requêtes. L'exécution de deux requêtes dans le même lot ou dans des lots séparés n'a aucun effet sur la mise en cache. Ainsi, vous pouvez soit expirer manuellement le cache, soit simplement exécuter les requêtes à plusieurs reprises. Toute optimisation de la requête n ° 2 aurait également une incidence sur les requêtes suivantes; par conséquent, excluez l'exécution n ° 1 si vous le souhaitez.
Voici le script de test complet et les résultats de performance qui prouvent que DateDiff est nettement plus rapide que la conversion en varchar.
Essaye ça:
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
La déclaration ci-dessus convertit votre format actuel en YYYY/MM/DD
, veuillez vous référer à ce lien pour choisir votre format préférable.
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))
Vous pouvez utiliser la fonction CONVERT
pour ne renvoyer que la date. Voir le (s) lien (s) ci-dessous:
Manipulation de la date et de l'heure dans SQL Server 2000
La syntaxe d'utilisation de la fonction convert est la suivante:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Pour retourner au format de date
CAST (OrderDate AS date)
Le code ci-dessus fonctionnera dans SQL Server 2010
Il va revenir comme 12/12/2013
Pour SQL Server 2012, utilisez le code ci-dessous
CONVERT(VARCHAR(10), OrderDate , 111)
Utilisation de FLOOR () - réduisez simplement le temps.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011
SI vous voulez utiliser CONVERT et obtenir le même résultat que dans la question initiale, c’est-à-dire aaaa-mm-jj, utilisez CONVERT(varchar(10),[SourceDate as dateTime],121)
le même code que les réponses précédentes, mais le code à convertir en aaaa-mm-jj avec des tirets est 121.
Si je peux accéder à ma tribune une seconde,ce type de formatage n'appartient pas au niveau de données, et c'est pourquoi il n'était pas possible sans "astuces" stupides jusqu'à ce que SQL Server 2008 lorsque les types de données datepart sont introduits. Réaliser de telles conversions dans la couche de données représente un gaspillage énorme de votre SGBD, mais plus important encore, dès que vous faites quelque chose comme cela, vous avez essentiellement créé des données orphelines en mémoire qui, je suppose, seront ensuite restaurées dans un programme. Vous ne pouvez pas le réintégrer dans une autre colonne 3NF + ni le comparer à un élément tapé sans revenir en arrière. Vous n'avez donc qu'à introduire les points d'échec et à supprimer les références relationnelles.
Vous devez TOUJOURS aller de l'avant et renvoyer votre type de données dateTime au programme appelant etdans le niveau PRESENTATION, effectuez les ajustements nécessaires.Dès que vous convertissez des éléments avant de les renvoyer à l'appelant, vous supprimez tout espoir d'intégrité référentielle de l'application. Cela empêcherait une opération UPDATE ou DELETE, encore une fois, à moins que vous ne fassiez une sorte de réversion manuelle, ce qui expose à nouveau vos données à une erreur humain/code/gremlin quand cela n’est pas nécessaire.
Utilisez Format()
function.
Il existe déjà plusieurs réponses et types de formatage pour SQL Server. Mais la plupart des méthodes sont quelque peu ambiguës et il vous serait difficile de vous souvenir des numéros de type de format ou de fonctions par rapport au format de date spécifique. C'est pourquoi les prochaines versions de SQL Server offrent une meilleure option.
FORMAT ( value, format [, culture ] )
L'option Culture est très utile car vous pouvez spécifier une date en fonction de vos téléspectateurs.
Vous devez vous rappeler d (pour les petits motifs) et D (pour les longs motifs).
2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)
2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)
Plus d'exemples dans la requête.
DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result';
SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';
US English Result Great Britain English Result German Result Simplified Chinese (PRC) Result
---------------- ----------------------------- ------------- -------------------------------------
10/1/2011 01/10/2011 01.10.2011 2011/10/1
US English Result Great Britain English Result German Result Chinese (Simplified PRC) Result
---------------------------- ----------------------------- ----------------------------- ---------------------------------------
Saturday, October 01, 2011 01 October 2011 Samstag, 1. Oktober 2011 2011年10月1日
Si vous voulez plus de formats, vous pouvez aller à:
SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)
SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))
Edit: Les deux premières méthodes sont essentiellement les mêmes et exécutez la méthode convert to varchar.
Pour obtenir le résultat indiqué, j'utilise la commande suivante.
SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
Je holpe c'est utile.
Si vous souhaitez obtenir un type de données varchar, vous devez passer par
SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26
qui est déjà mentionné ci-dessus
Si vous souhaitez obtenir un format de date et d’heure, passez à l’une des requêtes ci-dessous.
1) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 111))
as OnlyDate --2014-03-26 00: 00: 00.000
2) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112))
as OnlyDate --2014-03-26 00: 00: 00.000
3)
DECLARE @OnlyDate DATETIME
SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
SELECT @OnlyDate AS OnlyDate
--2014-03-26 00: 00: 00.000
Convert(nvarchar(10), getdate(), 101) ---> 5/12/14
Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014
Si vous affectez les résultats à une colonne ou à une variable, indiquez-lui le type DATE et la conversion est implicite.
DECLARE @Date DATE = GETDATE()
SELECT @Date --> 2017-05-03
Ok, bien que je sois un peu en retard :), voici une autre solution.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)
Résultat
2008-09-22 00:00:00.000
Et si vous utilisez SQL Server 2012 et versions ultérieures, vous pouvez utiliser la fonction FORMAT()
comme ceci -
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')
Je pense que cela fonctionnerait dans votre cas:
CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25
Même en utilisant l’ancien MSSQL Server 7.0, le code ici (grâce à this link ) me permettait d’obtenir le format de date que je recherchais à l’époque:
PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110)
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6)
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)
Il a produit cette sortie:
1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015 1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'
SELECT CONVERT(DATE, @yourdate)
Je favorise les suivants qui n'ont pas été mentionnés:
DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))
Il se moque également de la conversion locale ou de la conversion double - bien que chaque "datepart" fasse probablement des calculs. Cela peut donc être un peu plus lent que la méthode de datiff, mais pour moi, c'est beaucoup plus clair. Surtout quand je veux grouper uniquement par année et par mois (régler le jour à 1).
Sur SQL Server 2000
CAST(
(
STR( YEAR( GETDATE() ) ) + '/' +
STR( MONTH( GETDATE() ) ) + '/' +
STR( DAY( GETDATE() ) )
)
AS DATETIME)
Rendez-vous amoureux:
SELECT CONVERT (date, GETDATE ()) SELECT CAST (GETDATE () comme date)
Temps:
SELECT CONVERT (heure, GETDATE (), 114) SELECT CAST (GETDATE () comme heure)
Vous pouvez simplement faire de cette façon:
SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
Sorties en tant que:
2008-09-22 00:00:00.000
Ou simplement faire comme ceci:
SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'
Résultat:
Date Part Only
--------------
2013-07-14
pourquoi n'utilisez-vous pas DATE_FORMAT (your_datetiem_column, '% d-% m-% Y')?
EX: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name
vous pouvez changer la séquence de m, d et année en réorganisant la partie '%d-%m-%Y'
Cela manquait dans toutes les réponses, peut-être pas le plus efficace mais très facile à écrire et à comprendre, pas de style, pas de fonctions de date complexes.
SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE()))))
Date (champ date et heure) et DATE_FORMAT (date et heure, '% Y-% m-% d') les deux renvoient uniquement la date à partir de la date et de l'heure
SELECT * FROM tablename WHERE CAST ([my_date_time_var] AS DATE)= '8/5/2015'
Vous pouvez utiliser ce qui suit pour la partie de date et le formatage de la date:
DATENAME => Renvoie une chaîne de caractères représentant la date spécifiée de la date spécifiée.
DATEADD => La fonction DATEPART()
permet de renvoyer une partie d'une date/heure, telle que l'année, le mois, le jour, l'heure, les minutes, etc.
DATEPART => Renvoie un entier qui représente la partie de date spécifiée de la date spécifiée.
CONVERT()
=> La fonction CONVERT()
est une fonction générale qui convertit une expression d'un type de données en un autre . La fonction CONVERT()
peut être utilisée pour afficher des données de date/heure dans différents formats.
Je sais que c'est vieux, mais je ne vois pas où quiconque l'aurait déclaré de cette façon. D'après ce que je peux dire, c'est la norme ANSI.
SELECT CAST(CURRENT_TIMESTAMP AS DATE)
Il serait bon que Microsoft puisse également prendre en charge la variable CURRENT_DATE standard ANSI.
Si vous utilisez SQL 2008 et supérieur: SELECT CONVERT(DATE ,GETDATE())
Essaye ça:
SELECT CONVERT(date, GETDATE()) as date
Mon approche commune pour obtenir une date sans la partie heure ..
SELECT CONVERT(VARCHAR(MAX),GETDATE(),103)
SELECT CAST(GETDATE() AS DATE)
Si vous voulez que la date affiche 2008-09-22 00:00:00.000
alors vous pouvez l'arrondir en utilisant
SELECT CONVERT(datetime, (ROUND(convert(float, getdate()-.5),0)))
Cela montrera la date dans le format de la question
sélectionnez convert (getdate () en tant que daselect CONVERT (date/heure, CONVERT (date, getdate ())))
vous pouvez utiliser comme ci-dessous pour différents types de sortie pour la date uniquement
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 103))
----- jj/mm/aaaa
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))
------ mm/jj/aaaa
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 102))
select cast(createddate as date) as derivedate from table
createdate est votre colonne datetime, cela fonctionne pour sqlserver
SELECT CONVERT (date, getdate ())
Vous pouvez simplement utiliser le code ci-dessous pour obtenir uniquement la partie date et éviter la partie heure en SQL:
SELECT SYSDATE TODAY FROM DUAL;
Le moyen le plus simple serait d’utiliser: SELECT DATE(GETDATE())
Wow, laissez-moi compter les façons dont vous pouvez faire cela. (sans jeu de mots)
Pour obtenir les résultats souhaités dans ce format spécifiquement:
2008-09-22
Voici quelques options.
SELECT CAST(GETDATE() AS DATE) AS 'Date1'
SELECT Date2 = CONVERT(DATE, GETDATE())
SELECT CONVERT(DATE, GETDATE()) AS 'Date3'
SELECT CONVERT(CHAR(10), GETDATE(), 121) AS 'Date4'
SELECT CONVERT(CHAR(10), GETDATE(), 126) AS 'Date5'
SELECT CONVERT(CHAR(10), GETDATE(), 127) AS 'Date6'
Je suggérerais donc de choisir celle avec laquelle vous êtes à l'aise et d'utiliser cette méthode dans tous les tableaux.
Toutes ces options renvoient la date dans le même format. Pourquoi SQL Server a-t-il une telle redondance?
Je n'en ai aucune idée, mais c'est le cas. Peut-être que quelqu'un de plus intelligent que moi pourra répondre à cette question.
J'espère que ça aide quelqu'un.
Mon style
select Convert(smalldatetime,Convert(int,Convert(float,getdate())))