Bonjour
Par quel cast, conversion, flooring ou que sais-je faut-il passer pour exprimer proprement un where sur un champ DateTime ou seule la date doit etre signifiante
genre
Merci de votre aideCode:where DateTime=2010/04/03
Version imprimable
Bonjour
Par quel cast, conversion, flooring ou que sais-je faut-il passer pour exprimer proprement un where sur un champ DateTime ou seule la date doit etre signifiante
genre
Merci de votre aideCode:where DateTime=2010/04/03
on peut faire comme ça mais c'est loin d'être optimal car conversion en char :
Comme ceci, ça doit être plus optimale car on manipule des dates seulement :Code:convert ( nvarchar, ma_date , 103 ) = '06/04/2010'
Code:ma_date >= '06/04/2010' and ma_date < '07/04/2010'
Merci Jerome_Mtl
Je suis quand meme etonné qu'il n'y ait pas une maniere plus "intégréeé :roll:
Bonsoir,
Vous utilisez quelle version de SQL Server ?
++
Bonjour,
Si la colonne de type datetime est indexée alors spécifier dans la requête une date sous la forme d'une chaine de caractères entraîne une conversion implicite qui empêche l'utilisation de l'index, et donc des performances pauvres.
Dans votre cas vous allez donc être obligé de déclarer deux variables et de les affecter comme suit :
Vous pouvez ensuite utiliser le prédicat BETWEEN :Code:
1
2
3
4
5 DECLARE @dateDebut datetime , @dateFin datetime SELECT @dateDebut = CAST(CONVERT(CHAR(8), GETDATE(), 112) AS datetime) , @dateFin = @dateDebut + 1
Pour affecter @dateDebut, vous pouvez aussi utiliser :Code:WHERE DateTime BETWEEN @dateDebut AND @dateFin
Dans les deux cas vous pouvez remplacer GETDATE() par une variable de type datetime.Code:
1
2 SELECT @dateDebut = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS datetime) , @dateFin = @dateDebut + 1
Enfin, si vous êtes sous SQL Server 2008, vous pouvez écrire :
Et réutiliser par la suite le prédicat BETWEEN ;)Code:
1
2
3 DECLARE @maDate date = '20100406' DECLARE @dateDebut datetime = @maDate DECLARE @dateFin datetime = @dateDebut + 1
@++ ;)
Merci Elsuket pour ta réponse tres complète
Si vous utilisez SQL Server 2008 vous pouvez bénéficier du transtypage du type datetime en date sans perdre la possiblité d'utiliser un éventuel index.
Je vous laisse lire le billet que j'ai écrit à ce sujet.
++
Merci Mikedavem :ccool: