Bonjour, j'aimerai stocker uniquement la date dans ma base de donnees SQL Server 2005 et non pas le temps (00:00:00 par defaut).
Quelqu'un a une idee ?
merci![]()
Bonjour, j'aimerai stocker uniquement la date dans ma base de donnees SQL Server 2005 et non pas le temps (00:00:00 par defaut).
Quelqu'un a une idee ?
merci![]()
Le plus simple est d'enregistrer ta date dans un varchar.
Ou utiliser un datetime et forcer l'heure à 00:00:00
Justement : l'heure est a 00:00:00 mais j'aimerai eviter de stocker l'heure.
Envoyé par FamiDoo
Tu ne peux pas enlever l'hrs dans un datetime. Ce que tu peux faire, comme tlm a dit, c'est de stocker 00:00:00. J'imagine que toi ca te cause un prob parce que tu veux comparer 2 date mais ils ont des hrs différente ...
C'est pas une bonne idée de mettre ca dans un varchar. Le format datetime existe c'est pas pour rien. Sinon aussi bien de tout mettre en nvarchar(max) et ne pa typé ces columns.
Si tu veux manipuler tes dates sans l'heure, tu peux toujours les convertir avec ceci :
select convert(varchar(8), taDate, 112)
je me suis créé une function pour strippé l'hrs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ALTER FUNCTION [dbo].[StripTime] ( @Date AS DATETIME ) RETURNS DATETIME AS BEGIN RETURN convert(datetime, convert(varchar, @Date, 104), 104) END
C'est pas trop coutant niveau perf ?
Envoyé par Ptit_Dje
Nop, aucune perte de perf!
Le problème du cast en varchar est que si tu fais du tri sur ce champ, ton tri sera fait sur un varchar et non sur un datetime....
Pas forcément, ça cela ôte la possibilité d'utiliser les fonctions natives pour la gestion des dates directement sur ces valeurs, ou tout simplement d'effectuer des recherches par intervalles de dates ...Envoyé par Madinico
En ce sens, il est clairement mieux de stocker une date avec une heure à zéro.
Avec une fonction scalaire, ça ça m'étonneraitEnvoyé par shwin
Sauf si elle est utilisée pour définir une colonne calculée, et que cette dernière est indexée.
Rappelons qu'une valeur de type datetime est stockée sous la forme de deux entiers de 4 octets chacun, l'un représentant la date, et l'autre l'heure.
Cela étant, il est donc plus correct de rester avec des nombres.
Vous pouvez donc écrire :
Rappelons aussi que vous pouvez utiliser le format ISO de dates : AAAAMMJJ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT CAST(CEILING(CAST(GETDATE() AS float)) AS datetime)
En effet celui-ci fonctionne à peu preès pour n'importe quel langage, et permet d'écrire directement :
@++
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT CAST('20120812' AS datetime)![]()
Petite précision :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT CAST(CEILING(CAST(GETDATE() AS float)) AS datetime) SELECT CAST(Floor(CAST(GETDATE() AS float)) AS datetime)
attention utiliser floor et ceiling ne renverra pas le même résultat ainsi
si on a une date au 16/07/2012 à 17h23 avec ceiling on obtiendra 17/07/2012 00h00
en revanche avec floor on obtiendra 16/07/2012 00h00
test effectué sous sql server 2008 r2
ce qui est normal car les fonctions ne sont pas les même
A voir laquelle répond le mieux à vos besoins
NB:je précise car même si sa remonte à février et si l'Op a déjà eu sa réponse en recherchant sur le net je suis tombé sur ce post et dans mon cas c'est le floor qui m'intéressais.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager