Bonjour,
Cela fait quelques années que je travaille avec SQL Server et je n'ai jamais eu de tels problèmes.
CONVERT est une fonction faite pour appliquer un format à une donnée (c'est donc de la pure cosmétique), et non pas pour transformer une chaîne de caractères en date.
Ainsi vous pouvez laisser SQL Server faire cette transformation en écrivant directement :
1 2 3 4
| SELECT IDpla, dtpla, idcol, idaff_mat, idaff_apm
FROM dbo.VPA_PLANNING
WHERE idcol = 1009
AND dtpla = '2009-10-03 00:00:00' |
ou encore en utilisant CAST, ce qui est plus propre :
1 2 3 4
| SELECT IDpla, dtpla, idcol, idaff_mat, idaff_apm
FROM dbo.VPA_PLANNING
WHERE idcol = 1009
AND dtpla = CAST('2009-10-03 00:00:00' AS DATETIME) |
Pour les plages de dates je compose avec la clause BETWEEN, qui fonctionne parfaitement
mais dois-je mettre un GO aprés ?
GO n'est pas une instruction SQL ni T-SQL, c'est une commande de l'utilitaire en ligne de commande OSQL qui est maintenant SQLCMD.
Elle vous permet d'exécuter dans un script des commandes qui doivent être unique dans leur session d'exécution, comme un CREATE TABLE | TRIGGER | PROCEDURE | FUNCTION.
Jusqu'à présent j'ai toujours travaillé avec les dates en les décomposant avec Year() Month() et day()mais je trouve ça un peu lourd et sans doute gourmant en ressources.
Je confirme
Quel type est le mieux adapté, le datetime, le numérique en donnant la date en seconde ou le varchar en faisant un convert ?
Pour stocker une date, rien de mieux que le type ... date.
Vous en avez deux implémentations en T-SQL, qui sont DATETIME (précision à 3ms) et SMALLDATETIME (précision à la minute) jusqu'à SQL Server 2005.
SQL Server 2008 implémente d'autres types, comme DATE, TIME, DATETIMEOFFSET, ...
@++
Partager