IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Problème de conversion varchar en datetime pour être utilisé dans un between two dates


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème de conversion varchar en datetime pour être utilisé dans un between two dates
    Salut à tous,
    j'ai un problème, en effet, je suis entrain d'écrire un rapport avec RS2005 qui doit récupérer des infos dans une table relatives à une certaine période définie dynamiquement par l'utilisateur.Le nom de la BD est aussi dynamique.Le problème c'est que les données dans le champ DateDemande sont stockées en varchar(10). Voici le code de ma table et la procédure stockée qui fait le travail d'extraction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Table DocumentsDemandes
    --------------------------
    CREATE TABLE [dbo].[DocumentsDemandes](
    	[DemandeID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    	[DocumentID] [int] NULL,
    	[Libelle] [varchar](200) COLLATE French_CI_AS NULL,
    	[DocumentNo] [varchar](15) COLLATE French_CI_AS NULL,
    	[DocumentNoFolio] [varchar](15) COLLATE French_CI_AS NULL,
    	[DocumentText] [text] COLLATE French_CI_AS NULL,
    	[SiteID] [int] NULL,
    	[NombreExemplaire] [int] NULL,
    	[DateDemande] [varchar](10) COLLATE French_CI_AS NULL,
    	[DateDocument] [varchar](10) COLLATE French_CI_AS NULL,
    	[DateExpedition] [varchar](10) COLLATE French_CI_AS NULL,
    	[NoHologram] [varchar](20) COLLATE French_CI_AS NULL,
    	[NoPapier] [varchar](20) COLLATE French_CI_AS NULL,
    	[identiteID] [int] NOT NULL
     CONSTRAINT [PK_DocumentsDemandes] PRIMARY KEY CLUSTERED
     
    procédure stockée SP_TESTBYMASTER13
    ---------------------------------------
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
     
    create procedure SP_TESTBYMASTER13 @NOM_DB varchar(128),@Year1 varchar(20),@Year2 varchar(20)
    AS
    declare @MA_REQUETE VARCHAR(8000)
    declare @nom_complet varchar(128)
    set @nom_complet=@NOM_DB+'dbo.DocumentsDemandes.DateDemande'
     
    SET @MA_REQUETE = 'SELECT Libelle,''' 
    +convert(DateTime,@nom_complet,103)+''', COUNT(DemandeID) AS Nombre FROM ' + @NOM_DB+'.dbo.DocumentsDemandes where ''' 
    +convert(DateTime,@nom_complet,103)+''' between ''' 
    +convert(DateTime,@Year1,103)+''' and ''' 
    +convert(DateTime,@Year2,103)+'''GROUP BY Libelle,''' 
    +convert(DateTime,@nom_complet,103)+''' ORDER BY ''' 
    +convert(DateTime,@nom_complet,103);
     
    EXEC (@MA_REQUETE)
    en exécutant ma procédure avec la commande: exec SP_TESTBYMASTER13 'eMairieKinshasaBarumbu','10/10/2010','13/10/2010', j'ai le message d'erreur suivant:
    "Msg 241, Niveau 16, État 1, Procédure SP_TESTBYMASTER13, Ligne 11
    Échec de la conversion d'une valeur datetime à partir d'une chaîne de caractères."
    Votre aide me sera d'un grand secours...

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Même remarque que post ici :
    http://www.developpez.net/forums/d98...s/#post5526825
    Evitez d'utiliser un type de données inadéquat comme une chaine de caractères pour stocker ou manipuler une date. En effet, dans un SGBDR comme SQL Server, vous avez des type de données DATE qui sont spécifiquement fait pour stocker des dates !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Hello

    Passe tes dates au format ISO YYYYMMDD sans slash. Cela devrait faire l'affaire.

    Evitez d'utiliser un type de données inadéquat comme une chaine de caractères pour stocker ou manipuler une date. En effet, dans un SGBDR comme SQL Server, vous avez des type de données DATE qui sont spécifiquement fait pour stocker des dates !
    Oui ok, mais bon dans le monde réel parfois on a des colonnes avec types pourris : il faut faire avec car sinon ton boss te dégage car il en a rien à cirer que les dates soient stockées en char au lieu de datetime Bon sérieusement, je suis 100% d'accord avec toi, un bon typage vaut mieux que de longs converts.
    Emmanuel T.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par kagemaru Voir le message
    Oui ok, mais bon dans le monde réel parfois on a des colonnes avec types pourris : il faut faire avec car sinon ton boss te dégage car il en a rien à cirer que les dates soient stockées en char au lieu de datetime Bon sérieusement, je suis 100% d'accord avec toi, un bon typage vaut mieux que de longs converts.
    Un petit test de performance peut aussi aider à faire pencher la balance du bon côté...

Discussions similaires

  1. [AC-2003] Problème fonction Rechdom "Texte trop long pour être modifié"
    Par Ardiden31 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 21/05/2012, 14h28
  2. Conversion Varchar en datetime
    Par halloumiali dans le forum Requêtes
    Réponses: 19
    Dernier message: 06/04/2012, 16h43
  3. Réponses: 10
    Dernier message: 09/03/2012, 15h38
  4. Réponses: 2
    Dernier message: 07/01/2009, 18h03
  5. Probléme de conversion char vers datetime
    Par locs dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 28/02/2007, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo