Bonjour
avec cette table
Je veux une procédure identifiant pour une date dtpla et un ID idcol si idaff_mat ou idaff_apm contient une valeur >0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE [dbo].[VPA_PLANNING]( [IDpla] [int] IDENTITY(100001,1) NOT NULL, [dtpla] [smalldatetime] NULL, [idcol] [int] NULL, [idaff_mat] [int] NULL, [idaff_apm] [int] NULL, CONSTRAINT [PK_VPA_PLANNING] PRIMARY KEY CLUSTERED )
(il peut y avoir NULL 0 ou une valeur >1000)
J'ai la procédure
Mais bonjour les problèmes avec la date
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 dbo.spvpa_adm_planning_sijournoncomplet_test @ladate smalldatetime, @idcol int AS select * from vpa_planning where (idaff_mat< 1000 or idaff_apm < 1000) and idcol=@idcol and dtpla=@ladate
Je teste avec l'interface management studio directement sur la table
et j'obtient la requête SQL:
avec comme date le 17 mars 2009 que je note 17/03/2009 et auquel il ajoutte les quotes ( ='17/03/2009')
avec le 10 mars noté à l'identique 10/03/2009
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT IDpla, dtpla, idcol, idaff_mat, idaff_apm FROM dbo.VPA_PLANNING WHERE (idcol = 1009) AND (dtpla = CONVERT(DATETIME, '2009-03-17 00:00:00', 102))
je suis passé en octobre !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT IDpla, dtpla, idcol, idaff_mat, idaff_apm FROM dbo.VPA_PLANNING WHERE (idcol = 1009) AND (dtpla = CONVERT(DATETIME, '2009-10-03 00:00:00', 102))
J'ai essayé avec le type 103 au lieu du 102
j'ai mis l'expression = CONVERT (DATETIME, '2009-03-10 00:00:00', 103) directement dans le filtre de l'interface en face de dtpla
et j'obtient l'enregistrement du 3 octobre 2009
Idem avec le type 102
Et je ne parle pas des séries. Si je veux les enregistrements du 10/03/2009 au 19/03/2009 ça devient vraiment loufoque.
J'ai essayé de mettre
SET DATEFORMAT YMD
dans ma proceure stockée mais je ne dois pas bien m'y prendre car j'ai des erreurs de convertion
Je l'ai mis entre la ligne AS et la ligne Select de la procedure stockée
mais dois-je mettre un GO aprés ?
Comment être sur que les enregistrements que retourne la requête correspondent bien à ce que l'on a demandé si le système traite différemment les dates inférieures au 13 du mois des autres
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.
Y a t-il un article de référence sur ce théme, pour les dates et plages de dates transmises en paramètres à une procédure stockée?
Quel type est le mieux adapté, le datetime, le numérique en donnant la date en seconde ou le varchar en faisant un convert ?
Par avance merci pour vos pistes et information
Didier
Partager