convert - sql server format date yyyymmdd




Comment retourner uniquement la date à partir d'un type de données SQL Server DateTime (20)

Si vous utilisez SQL Server 2012 ou versions supérieures ,

Utilisez la fonction Format() .

Il existe déjà plusieurs réponses et types de formatage pour le serveur SQL. Mais la plupart des méthodes sont quelque peu ambiguës et il vous serait difficile de vous souvenir des nombres pour le type de format ou les fonctions en ce qui concerne le format de date spécifique. C'est pourquoi dans les prochaines versions de SQL Server il y a une meilleure option.

FORMAT ( value, format [, culture ] )

L'option Culture est très utile, car vous pouvez spécifier la date selon vos spectateurs.

Vous devez vous rappeler d (pour les petits motifs) et D (pour les longs motifs).

1. "d" - Modèle de date courte.

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)

2. "D" - Modèle de date longue.

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 à:

  1. Chaînes de format de date et d'heure standard
  2. Chaînes de format de date et d'heure personnalisées
SELECT GETDATE()

Retours: 2008-09-22 15:24:13.790

Je veux cette partie de date sans la partie de temps: 2008-09-22 00:00:00.000

Comment puis-je l'obtenir?


À partir de SQL Server 2012, vous pouvez le faire:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')


Cela manquait dans toutes les réponses, peut-être pas le plus efficace mais très facile à écrire et à comprendre, pas de style nécessaire, pas de fonctions de date complexes.

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

DATEADD et DATEDIFF sont meilleurs que CONVERTing 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 aux données et ne révèlent pas toujours les coûts implicites impliqués dans le temps CPU nécessaire pour exécuter toutes les pièces. Si les deux requêtes sont exécutées sur une table avec des millions de lignes, l'heure du processeur en utilisant DateDiff peut être proche de 1/3 du temps CPU Convert!

Pour voir les plans d'exécution des requêtes:

set showplan_text on
GO 

DATEADD et DATEDIFF exécuteront un CONVERT_IMPLICIT.

Bien que la solution CONVERT soit plus simple et plus lisible pour certains, elle est plus lente. Il n'est pas nécessaire de renvoyer vers datetime (ceci est implicitement effectué par le serveur). Il n'y a pas non plus de besoin réel dans la méthode DateDiff pour DateAdd, car le résultat entier sera également implicitement converti en datetime.

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 (jj, 0, DATEDIFF (jj, 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 n'est pas recommandée car la conversion du type de données datetime en float et back ne donne pas toujours la valeur d'origine.

Rappelez-vous les gars: Ne croyez personne. Regardez les statistiques de performance, et testez vous-même!

Soyez prudent lorsque vous testez vos résultats. La sélection de nombreuses lignes pour le client masquera la différence de performance 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 pour toutes les lignes est effectué par le serveur, mais qu'aucun ensemble de lignes n'est envoyé au client.

Il semble y avoir de la confusion pour certaines personnes à propos de l'optimisation du cache qui 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. Vous pouvez donc soit expirer le cache manuellement, soit simplement exécuter les requêtes plusieurs fois. Toute optimisation pour la requête n ° 2 affecterait également les requêtes suivantes, donc jetez l'exécution n ° 1 si vous le souhaitez.

Voici un script de test complet et des résultats de performance qui prouvent que DateDiff est sensiblement plus rapide que la conversion en varchar.


Je pense que cela fonctionnerait dans votre cas:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

Je suis favorable à ce qui suit qui n'a pas été mentionné:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

Il ne se soucie pas non plus de local ou fait une double conversion - bien que chaque 'datepart' fasse probablement des maths. Donc, il se peut que ce soit un peu plus lent que la méthode de datediff, mais pour moi c'est beaucoup plus clair. Surtout quand je veux regrouper juste l'année et le mois (mettre le jour à 1).


Pour obtenir le résultat indiqué, j'utilise la commande suivante.

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

Je holpe c'est utile.


Rendez-vous amoureux:

SELECT CONVERT(date, GETDATE())
SELECT CAST(GETDATE() as date)

Temps:

SELECT CONVERT(time , GETDATE() , 114)
SELECT CAST(GETDATE() as time)

SQLServer 2008 a maintenant un type de données 'date' qui contient uniquement une date sans composant heure. Toute personne utilisant SQL Server 2008 et les versions ultérieures peut effectuer les opérations suivantes:

SELECT CONVERT(date, GETDATE())

Si vous affectez les résultats à une colonne ou à une variable, attribuez-lui le type DATE et la conversion est implicite.

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03

Si vous utilisez SQL 2008 et plus:

select cast(getdate() as date)

Sur SQL Server 2008 et supérieur, vous devez 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:

  • Aucune conversion varchar <-> datetime requise
  • Pas besoin de penser à la locale


Vous pouvez utiliser les éléments suivants pour la partie date et le formatage de la date:

DATENAME => Renvoie une chaîne de caractères représentant la datepart spécifiée de la date spécifiée

DATEADD => La fonction DATEPART() est utilisée pour renvoyer une seule partie d'une date / heure, telle que l'année, le mois, le jour, l'heure, la minute, etc.

DATEPART => Renvoie un entier représentant la datepart 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 une autre. La fonction CONVERT() peut être utilisée pour afficher les données de date / heure dans différents formats.


Date (champ de la date et de l'heure) et DATE_FORMAT (date et heure, '% Y-% m-% d') les deux renvois ne datent que de la date et de l'heure


Pour le retour au format de date

CAST (OrderDate AS date)

Le code ci-dessus fonctionnera dans SQL Server 2010

Il reviendra comme 12/12/2013

Pour SQL Server 2012, utilisez le code ci-dessous

CONVERT(VARCHAR(10), OrderDate , 111)

DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'    
SELECT CONVERT(DATE, @yourdate)

SELECT * FROM tablename WHERE CAST ([my_date_time_var] AS DATE)= '8/5/2015'

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

SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))






datetime