Si vous cherchez à obtenir un type de données de date sans l'heure, même si l'heure est 00:00:00 alors vous n'avez pas de chance, vous pouvez obtenir un varchar mais la structure est une date et vous aurez toujours du temps.
@Rohit Vous supposez à tort que 2008 est la seule version dont les gens se soucient. (Il existe d'autres versions dans la nature.) Les votes parlent d'eux-mêmes.
hktegner
Réponses:
2487
À partir de SQL Server 2008maintenant, vous devez CONVERTà ce jour:
SELECTCONVERT(date, getdate())
Sur les anciennes versions, vous pouvez effectuer les opérations suivantes:
+1 On dirait que celle-ci est 35% plus rapide que la méthode double convert () couramment utilisée (que j'utilise également depuis des années). Joli.
Dane
8
Le seul inconvénient que je peux voir dans votre solution est qu'à moins que vous sachiez ce qu'elle fait, elle est un peu obtuse. L'utilisation de la méthode de double conversion rend vos intentions plus évidentes pour les responsables du futur code. BTW Je ne vous ai pas rétrogradé. Je pense que je vais aussi commencer à utiliser votre méthode. Merci @aku
Jim Birchall
38
@pilavdzice La définition d'une heure à minuit ce jour-là permet de GARDER LE TEMPS. Quel résultat attendez-vous? Le datetimetype de données ne peut pas avoir du tout de temps . Je pense que vous confondez le stockage de données avec la présentation des utilisateurs. Si tout ce que vous voulez, c'est un moyen de montrer à un utilisateur une chaîne qui n'a pas de partie de temps (pas de zéros, juste des blancs), alors vous voulez simplement Convert(varchar(30), @Date, 101)ou quelque chose de similaire. Consultez la documentation en ligne de SQL Server • Cast and Convert pour plus d'informations.
ErikE
7
@ user1671639 le type de données datetime contient toujours à la fois une date et une heure, vous ne pouvez pas stocker l'une sans l'autre de manière sensée - à moins que vous n'utilisiez SQL Server 2008, auquel cas il existe également des données distinctes "date" et "heure" les types. Si vous utilisez CONVERT () comme ça, vous voulez vraiment une chaîne pour une utilisation ultérieure, donc vous serez bloqué en le faisant comme ça - bien que ce serait mieux si vous utilisiez des fonctions de formatage de date au lieu de couper la date - ou via CAST(... AS DATE)ou CONVERT(DATE, ...), qui a été mentionné assez souvent sur cette même page.
Magnus
10
Je recommande de changer la réponse en SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)car il ddpeut alors être échangé contre tout autre datepartmot clé pour tronquer votre datetimeà un niveau arbitraire.
Michael - Où est Clay Shirky
717
SQLServer 2008 dispose désormais d'un type de données «date» qui contient uniquement une date sans composant d'heure. Toute personne utilisant SQLServer 2008 et au-delà peut effectuer les opérations suivantes:
Il existe également le type de données «heure» dans SQL2008 qui répond à l'autre moitié de la question de la séparation de la date et de l'heure.
misteraidan
8
Pour info, j'ai comparé différentes méthodes de coupe du temps à partir des dates et c'était la méthode la plus rapide. Certes, la différence était faible, mais elle était clairement plus rapide sur un grand nombre d'exécutions.
@FredrickGauss: De quel type, Date? Quelle version de SQL Server utilisez-vous?
abatishchev
7
Il faut se méfier! declare @ date1 datetime = '2015-09-30 20: 59: 59.999'; sélectionner le casting (@ date1 comme date) renvoie '2015-10-01'
Nick
6
@Nick: c'est le problème avec DateTime. utiliser à la DateTime2place et cela fonctionne bien. sqlfiddle.com/#!6/9eecb7/2833
abatishchev
8
@Nick, pour compléter la réponse d'Abatishchev, votre @ date1 est en effet 2015-10-01due à des DateTimelimitations. Essayez sans aucun casting Date, ça donne 2015-10-01aussi! declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1=>2015-10-01
Frédéric
4
L'une de ces astuces SQL faciles à retenir. Comme le dit Mike, à partir de 2008 seulement, mais si vous trouvez quelque part une base de données 2005 et précédente, vous pouvez avoir beaucoup de problèmes :)
NicVerAZ
73
DATEADD et DATEDIFF sont meilleurs que CONVERT 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, le temps CPU utilisant DateDiff peut être proche du 1/3 du temps Convert CPU!
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 facile à lire pour certains, elle est plus lente. Il n'est pas nécessaire de revenir à datetime (cela est implicitement fait par le serveur). Il n'y a pas non plus de réel besoin dans la méthode DateDiff pour DateAdd par la suite, car le résultat entier sera également reconverti implicitement en datetime.
SELECT CONVERT (varchar, MyDate, 101) FROM DatesTable
L'utilisation de FLOOR () comme l'a suggéré @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.
N'oubliez pas 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 plusieurs lignes pour 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 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 sur le 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 distincts n'a aucun effet sur la mise en cache. Ainsi, vous pouvez soit expirer le cache manuellement, soit simplement exécuter les requêtes d'avant en arrière plusieurs fois. Toute optimisation pour la requête # 2 affecterait également toutes les requêtes ultérieures, alors jetez l'exécution # 1 si vous le souhaitez.
Ricardo C, belle enquête! Quelle version de SQL Server utilisez-vous? Sur la méthode MSSQL2000 avec datiff fonctionne un peu plus vite pour moi.
aku
Juste pour noter, j'ai effectué le test 1000.000 fois. Pour les scénarios du monde réel, la différence de performance ne sera pas perceptible, je suppose
aku
Aku, j'ai utilisé SQL Server 2005 Express pour ce test. Je travaille sur 2000 au travail, et je vais le tester avec un tableau de plus de 24 millions de lignes et voir ce qui en sort.
Ricardo C
Aku, mêmes résultats. Aucune différence de performance sur dix millions de lignes.
Ricardo C
5
Les affirmations sur l'égalité des performances ne sont pas vraies. Bien sûr, les plans d'exécution seront les mêmes !!! La mesure des performances sur ces derniers DOIT être effectuée en comparant l'utilisation du processeur, et non en examinant les plans d'exécution.
ErikE
51
Essaye ça:
SELECTCONVERT(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éré.
Cette méthode n'est pas la plus rapide et enseigne implicitement aux gens que les dates de casting à flotter sont précises, ce qui n'est pas le cas. Veuillez consulter cet article pour plus de détails.
ErikE
13
Si vous utilisez SQL Server 2012 ou des versions supérieures ,
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 serait difficile pour vous de vous souvenir des nombres pour le type de format ou les fonctions par rapport au 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 téléspectateurs.
Vous devez vous rappeler d (pour les petits motifs) et D (pour les longs motifs).
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/201101/10/201101.10.20112011/10/1
US English Result Great Britain English Result German Result Chinese (Simplified PRC) Result
---------------------------- ----------------------------- ----------------------------- ---------------------------------------
Saturday, October 01,201101 October 2011 Samstag,1. Oktober 20112011年10月1日
Si vous voulez plus de formats, vous pouvez aller sur:
SI vous souhaitez utiliser CONVERT et obtenir la même sortie que dans la question d'origine posée, c'est-à-dire aaaa-mm-jj, puis utilisez le CONVERT(varchar(10),[SourceDate as dateTime],121)même code que les réponses du couple précédent, mais le code à convertir en aaaa-mm-jj avec des tirets est 121.
Si je peux accéder à ma boîte à savon pendant une seconde, ce type de formatage n'appartient pas au niveau de données , et c'est pourquoi cela n'a pas été possible sans des `` astuces '' stupides à frais généraux élevés jusqu'à SQL Server 2008, lorsque les types de données de partie de date réels sont introduit. Effectuer de telles conversions dans le niveau de données est un énorme gaspillage de frais généraux sur votre SGBD, mais plus important encore, la seconde où vous faites quelque chose comme ça, vous avez essentiellement créé des données orphelines en mémoire que je suppose que vous retournerez ensuite à un programme. Vous ne pouvez pas le replacer dans une autre colonne 3NF + ou le comparer à quelque chose tapé sans revenir en arrière, donc tout ce que vous avez fait est d'introduire des points de défaillance et de supprimer la référence relationnelle.
Vous devez TOUJOURS continuer et renvoyer votre type de données dateTime au programme appelant et dans le niveau PRESENTATION, faire les ajustements nécessaires. Dès que vous allez convertir des choses 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, sauf si vous effectuez une sorte de réversion manuelle, qui expose à nouveau vos données à une erreur humaine / code / gremlin lorsqu'il n'y a pas besoin.
Sauf, disons, si vous voulez une requête qui récupère tous les enregistrements correspondant à une date fournie par l' utilisateur en tant que partie de date d'un certain champ d'heure. Bonne chance pour le faire uniquement dans la couche de présentation. (Vous n'avez pas besoin de convertir, vous pouvez utiliser l'arithmétique des dates, mais vous avez l'idée…)
Andrew Lazarus
1
@Andrew, pourquoi est-ce important? Vous dites WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);- il n'y a absolument aucune raison de retirer le temps de la colonne.
Aaron Bertrand
1
@AaronBertrand Cela fonctionne uniquement en supposant que l'entrée @Datea une partie de temps zéro. Dans le cas où ce n'est pas vrai, vous devez toujours savoir comment tronquer les temps côté serveur. Je suis d'accord avec cette réponse que la mise en forme devrait être laissée à la couche de présentation, mais je n'étais pas d'accord avec une implication selon laquelle laisser cela pour le front-end signifie que vous n'avez pas besoin de connaître un moyen rapide de tronquer.
Andrew Lazarus
1
@Andrew, il vous suffit de définir le paramètre d'entrée DATE. Mon point est toujours que vous ne devriez jamais avoir à appliquer une telle troncature à la colonne , même si c'est le premier instinct de la plupart des gens.
Aaron Bertrand
1
@AaronBertrand et cela suppose que vous avez le contrôle sur le type de données du paramètre. Très bien dans une procédure stockée, pas si possible dans d'autres situations. Pourquoi ne pas convertir pour être sûr que le paramètre est le type que vous voulez et dont vous avez besoin?
Ces méthodes sont toutes excellentes, mais laquelle suggérez-vous d'utiliser?
eddiegroves
3
Notez que la version de la partie supérieure de deux est « correct » select dateadd(dd, datediff(dd, 0, getdate()), 0), parce que les dds peuvent alors être permutées pour l' une des les datepartmots - clés pour couper la date à tout segment que vous choisissez. (Notez également que ce ddn'est qu'une abréviation pour day.)
Michael - Où est Clay Shirky
10
Pour obtenir le résultat indiqué, j'utilise la commande suivante.
Votre premier exemple a toujours une composante temps. La question était de savoir comment supprimer cela.
Zack
5
Même en utilisant l'ancien MSSQL Server 7.0, le code ici (gracieuseté de ce lien ) m'a permis 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 2720151:14PM
2) Date/time in format MM-DD-YY:02-27-153) Date/time in format MM-DD-YYYY:02-27-20154) Date/time in format DD MON YYYY:27 Feb 20155) Date/time in format DD MON YY:27 Feb 156) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H):27 Feb 201513:14:46:630
select {fn current_date()} as todaytravaille pour moi.
brianary
@brianary - C'est bien, mais ce n'est pas ANSI SQL.
allumé
C'est assez juste, et votre réponse est bien portable, mais j'ai pensé que tant que nous travaillons autour de T-SQL, cela fonctionne également (et montre que l'implémentation de ANSI CURRENT_DATE serait triviale pour MS).
Il ne se soucie pas non plus du local ou fait une double conversion - bien que chaque «datepart» fasse probablement des calculs. Cela peut donc être un peu plus lent que la méthode datiff, mais pour moi, c'est beaucoup plus clair. Surtout quand je veux regrouper uniquement l'année et le mois (régler le jour sur 1).
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 qui représente la partie de date spécifiée de la date spécifiée
DATEADD => La DATEPART()fonction est utilisée pour renvoyer une seule partie d'une date / heure, comme l'année, le mois, le jour, l'heure, la minute, etc.
DATEPART => Renvoie un entier qui représente la partie date spécifiée de la date spécifiée.
CONVERT()=> La CONVERT()fonction est une fonction générale qui convertit une expression d'un type de données en un autre. La
CONVERT()fonction peut être utilisée pour afficher les données de date / heure dans différents formats.
Réponses:
À partir de
SQL Server 2008
maintenant, vous devezCONVERT
à ce jour:Sur les anciennes versions, vous pouvez effectuer les opérations suivantes:
par exemple
Donne moi
Avantages:
varchar
<->datetime
conversion requiselocale
Comme suggéré par Michael
Utilisez cette variante:
SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Production:
la source
datetime
type de données ne peut pas avoir du tout de temps . Je pense que vous confondez le stockage de données avec la présentation des utilisateurs. Si tout ce que vous voulez, c'est un moyen de montrer à un utilisateur une chaîne qui n'a pas de partie de temps (pas de zéros, juste des blancs), alors vous voulez simplementConvert(varchar(30), @Date, 101)
ou quelque chose de similaire. Consultez la documentation en ligne de SQL Server • Cast and Convert pour plus d'informations.CAST(... AS DATE)
ouCONVERT(DATE, ...)
, qui a été mentionné assez souvent sur cette même page.SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)
car ildd
peut alors être échangé contre tout autredatepart
mot clé pour tronquer votredatetime
à un niveau arbitraire.SQLServer 2008 dispose désormais d'un type de données «date» qui contient uniquement une date sans composant d'heure. Toute personne utilisant SQLServer 2008 et au-delà peut effectuer les opérations suivantes:
la source
Si vous utilisez SQL 2008 et supérieur:
la source
DateTime2
place et cela fonctionne bien. sqlfiddle.com/#!6/9eecb7/28332015-10-01
due à desDateTime
limitations. Essayez sans aucun castingDate
, ça donne2015-10-01
aussi!declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1
=>2015-10-01
DATEADD et DATEDIFF sont meilleurs que CONVERT 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, le temps CPU utilisant DateDiff peut être proche du 1/3 du temps Convert CPU!
Pour voir les plans d'exécution des requêtes:
DATEADD et DATEDIFF exécuteront un CONVERT_IMPLICIT.
Bien que la solution CONVERT soit plus simple et plus facile à lire pour certains, elle est plus lente. Il n'est pas nécessaire de revenir à datetime (cela est implicitement fait par le serveur). Il n'y a pas non plus de réel besoin dans la méthode DateDiff pour DateAdd par la suite, car le résultat entier sera également reconverti implicitement en datetime.
SELECT CONVERT (varchar, MyDate, 101) FROM DatesTable
SELECT DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) FROM DatesTable
L'utilisation de FLOOR () comme l'a suggéré @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.
N'oubliez pas 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 plusieurs lignes pour 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 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 sur le 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 distincts n'a aucun effet sur la mise en cache. Ainsi, vous pouvez soit expirer le cache manuellement, soit simplement exécuter les requêtes d'avant en arrière plusieurs fois. Toute optimisation pour la requête # 2 affecterait également toutes les requêtes ultérieures, alors jetez l'exécution # 1 si vous le souhaitez.
Voici un script de test complet et des résultats de performances qui prouvent que DateDiff est nettement plus rapide que la conversion en varchar.
la source
Essaye ça:
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éré.la source
mm/dd/yyyy
format.la source
Pour retour au format 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
la source
Vous pouvez utiliser la
CONVERT
fonction pour renvoyer uniquement la date. Voir le (s) lien (s) ci-dessous:Manipulation de la date et de l'heure dans SQL Server 2000
CAST et CONVERT
La syntaxe d'utilisation de la fonction convert est:
la source
Si vous avez besoin du résultat en tant que
varchar
, vous devez passer parqui est déjà mentionné ci-dessus.
Si vous avez besoin d'un résultat au format date et heure, vous devez utiliser l'une des requêtes ci-dessous
la source
la source
Utilisation de FLOOR () - il suffit de couper la partie temporelle.
la source
Si vous utilisez SQL Server 2012 ou des versions supérieures ,
Utilisez la
Format()
fonction.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 serait difficile pour vous de vous souvenir des nombres pour le type de format ou les fonctions par rapport au format de date spécifique. C'est pourquoi dans les prochaines versions de SQL Server, il y a une meilleure option.
L'option Culture est très utile, car vous pouvez spécifier la date selon vos téléspectateurs.
Vous devez vous rappeler d (pour les petits motifs) et D (pour les longs motifs).
1. "d" - Motif de date court.
2. "D" - Motif de date longue.
Plus d'exemples dans la requête.
Si vous voulez plus de formats, vous pouvez aller sur:
la source
SI vous souhaitez utiliser CONVERT et obtenir la même sortie que dans la question d'origine posée, c'est-à-dire aaaa-mm-jj, puis utilisez le
CONVERT(varchar(10),[SourceDate as dateTime],121)
même code que les réponses du couple précédent, mais le code à convertir en aaaa-mm-jj avec des tirets est 121.Si je peux accéder à ma boîte à savon pendant une seconde, ce type de formatage n'appartient pas au niveau de données , et c'est pourquoi cela n'a pas été possible sans des `` astuces '' stupides à frais généraux élevés jusqu'à SQL Server 2008, lorsque les types de données de partie de date réels sont introduit. Effectuer de telles conversions dans le niveau de données est un énorme gaspillage de frais généraux sur votre SGBD, mais plus important encore, la seconde où vous faites quelque chose comme ça, vous avez essentiellement créé des données orphelines en mémoire que je suppose que vous retournerez ensuite à un programme. Vous ne pouvez pas le replacer dans une autre colonne 3NF + ou le comparer à quelque chose tapé sans revenir en arrière, donc tout ce que vous avez fait est d'introduire des points de défaillance et de supprimer la référence relationnelle.
Vous devez TOUJOURS continuer et renvoyer votre type de données dateTime au programme appelant et dans le niveau PRESENTATION, faire les ajustements nécessaires. Dès que vous allez convertir des choses 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, sauf si vous effectuez une sorte de réversion manuelle, qui expose à nouveau vos données à une erreur humaine / code / gremlin lorsqu'il n'y a pas besoin.
la source
WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);
- il n'y a absolument aucune raison de retirer le temps de la colonne.@Date
a une partie de temps zéro. Dans le cas où ce n'est pas vrai, vous devez toujours savoir comment tronquer les temps côté serveur. Je suis d'accord avec cette réponse que la mise en forme devrait être laissée à la couche de présentation, mais je n'étais pas d'accord avec une implication selon laquelle laisser cela pour le front-end signifie que vous n'avez pas besoin de connaître un moyen rapide de tronquer.Edit: Les deux premières méthodes sont essentiellement les mêmes, et exécutez la méthode de conversion en varchar.
la source
select dateadd(dd, datediff(dd, 0, getdate()), 0)
, parce que lesdd
s peuvent alors être permutées pour l' une des lesdatepart
mots - clés pour couper la date à tout segment que vous choisissez. (Notez également que cedd
n'est qu'une abréviation pourday
.)Pour obtenir le résultat indiqué, j'utilise la commande suivante.
Je holpe c'est utile.
la source
la source
Si vous affectez les résultats à une colonne ou une variable, donnez-lui le type DATE et la conversion est implicite.
la source
Je pense que cela fonctionnerait dans votre cas:
la source
la source
D'accord, bien que je sois un peu en retard :), voici une autre solution.
Résultat
Et si vous utilisez SQL Server 2012 et supérieur, vous pouvez utiliser une
FORMAT()
fonction comme celle-ci -la source
Même en utilisant l'ancien MSSQL Server 7.0, le code ici (gracieuseté de ce lien ) m'a permis d'obtenir le format de date que je recherchais à l'époque:
Il a produit cette sortie:
la source
Date:
Temps:
la source
Vous pouvez simplement le faire de cette façon:
Sorties comme:
Ou faites simplement ceci:
Résultat:
la source
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
'%d-%m-%Y'
partiela source
Je sais que c'est vieux, mais je ne vois pas où quelqu'un l'a déclaré de cette façon. D'après ce que je peux dire, c'est la norme ANSI.
Ce serait bien si Microsoft pouvait également prendre en charge la variable CURRENT_DATE standard ANSI.
la source
select {fn current_date()} as today
travaille pour moi.Je suis favorable à ce qui n'a pas été mentionné:
Il ne se soucie pas non plus du local ou fait une double conversion - bien que chaque «datepart» fasse probablement des calculs. Cela peut donc être un peu plus lent que la méthode datiff, mais pour moi, c'est beaucoup plus clair. Surtout quand je veux regrouper uniquement l'année et le mois (régler le jour sur 1).
la source
À partir de SQL SERVER 2012, vous pouvez faire ceci:
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')
la source
Sur SQL Server 2000
la source
Dans ce cas, date uniquement, vous allez exécuter cette requête:
SELECT CONVERT (VARCHAR (10), getdate (), 111);
la source
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 qui représente la partie de date spécifiée de la date spécifiée
DATEADD => La
DATEPART()
fonction est utilisée pour renvoyer une seule partie d'une date / heure, comme l'année, le mois, le jour, l'heure, la minute, etc.DATEPART => Renvoie un entier qui représente la partie date spécifiée de la date spécifiée.
CONVERT()
=> LaCONVERT()
fonction est une fonction générale qui convertit une expression d'un type de données en un autre. LaCONVERT()
fonction peut être utilisée pour afficher les données de date / heure dans différents formats.la source