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

MS SQL Server Discussion :

Convert String to Date


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut Convert String to Date
    Bonjour,

    Je suis actuellement en train d'importer un fichier source plat contenant 3 champs avec des dates aux formats suivant yyyymmdd ==> '20110502'

    Je souhaiterai lors de mon import convertir mes champs au format Date seulement lorsque que je fais mon import des erreurs sont générées...

    Je pensais donc importer toutes mes données premièrement au format DT-STR puis lancer une "tâche de conversion de données" pour mettre mes 3 champs au format DATE sauf que cela ne fonctionne pas non plus...

    La 3 solutions c'est d'executer une requête après importation de mon fichier et de faire un traitement sur mes 3 champs sauf que je ne sais pas à quel moment faut-il le faire ?

    Je vous joint le processus d'importation afin que vous puissiez me guider... Merci

    EDIT : Modification de de mon image, ajout du DDL de la table TEMP et ajout d'un extrait du fichier plat
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Quelle est la DDL de votre table destinatrice ?
    Donnez nous également un extrait de jeu de données de votre fichier texte ?

    ++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    C'est bon j'ai complété avec les infos demandées dans mon premier message

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Vous pouvez brancher la sortie rouge sur une alimentation de table avec le même format que les données sources afin de voir ce qui pèche dans votre fichier !

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous pouvez brancher la sortie rouge sur une alimentation de table avec le même format que les données sources afin de voir ce qui pèche dans votre fichier !
    Ce qui pèche, c'est que je comprend pas le mode opératoire... lol

    Enfin je capte certaines choses tout de mm, actuellement si mon fichier source n'est pas au même format que ma table de destination TEMP, j'ai une erreur qui se produit...
    Lorsque les deux tables sont identiques y a plus de problèmes toutes mes lignes sont crées sauf que pour ce faire je dois mettre mes 3 champs de date au format "varchar" et "DT_STR" (ce qui est la mm chose ?)

    Le problème que j'avais c'est que je pensais pourvoir transformer mes 3 champs date en utilisant la "tache de conversion", càd partir avec mon fichier source avec un type de données "varchar" et finir dans ma table TEMP un type de données "Date"


    Donc je vois bien que ça marche pas pour le moment... Donc est ce que c'est bien comme ca qu'il faut faire ? Ou juste faire un import fichier source et destination au mm format puis faire une requete SQL de conversion de mes champs date ?

    J'espère avoir reussi à me faire comprendre Merci

    Merci également pour l'info de la flèche rouge, ca permet de faire du débug ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Je me permet de relancer mon sujet car je me retrouve dans une impasse actuellement et je ne veux pas passer à autre chose sans avoir résolu ce problème.

    Est ce que ça change quelque chose de faire mes conversions de type de données avant ou après l'insertion dans ma table TEMP ?
    C'est à dire retravailler pendant l'import ou après ? Au niveau des performances, selon la manière officielle de faire ?

    J'ai essayé de changer le format de date d'SQL Server afin qu'il corresponde avec mon fichier texte mais NADA...

    Donc est ce que je ferai pas une requète CONVERT pour transformer mon format des 3 champs dates ?

    Merci de votre aide

  7. #7
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Donc je vois bien que ça marche pas pour le moment... Donc est ce que c'est bien comme ca qu'il faut faire ? Ou juste faire un import fichier source et destination au mm format puis faire une requete SQL de conversion de mes champs date ?
    Moi je ferais comme çà mais vous pourriez très bien typer varchar votre colonne d'entrée puis faire une étape de conversion...


    selon la manière officielle de faire
    Il n'y a pas de manière officielle de faire...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par iberserk Voir le message
    mais vous pourriez très bien typer varchar votre colonne d'entrée puis faire une étape de conversion...

    Merci pour tes conseils mais quand tu dis typer varchar ma colonne d'entrée, c'est ce que j'essaye de faire depuis le début, enfin je crois ?!

    Puisque ma colonne d'entrée est de type varchar et que ma colonne de sortie est de type date...

    Sauf que ca marche pas ca, est ce qu'il faut que je change le format de date par defaut SQL Server, un truc du genre ?

  9. #9
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Puisque ma colonne d'entrée est de type varchar et que ma colonne de sortie est de type date...
    C'est une étape supplémentaire de transformation qui doit s'en charger...

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par iberserk Voir le message
    C'est une étape supplémentaire de transformation qui doit s'en charger...
    Oui, donc une étape de transformation sous forme de requete SQL, mais à quel niveau je dois la mettre en place, une fois l'importation faite (rajouter une tache après "tache de flux de données 1" selon le schema du 1er post) ?

    Autre question, pour convertir mes champs date au format varchar quel serai la requête j'ai beau chercher je ne trouve pas de piste afin de convertir une colonne varchar vers date... ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CONVERT (matable, 112) AS DATE ??
     
    SELECT CAST (matable, 112) AS DATE ???
    c'est un truc du genre ?

    Merci d'avance

  11. #11
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Oui, donc une étape de transformation sous forme de requete SQL, mais à quel niveau je dois la mettre en place, une fois l'importation faite (rajouter une tache après "tache de flux de données 1" selon le schema du 1er post) ?
    Oui

    SELECT CONVERT (matable, 112) AS DATE ??

    SELECT CAST (matable, 112) AS DATE ???
    Presque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CONVERT (datetime,macolonneDate, 112)
    FROM maTable

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Oui


    Presque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CONVERT (datetime,macolonneDate, 112)
    FROM maTable
    Pour bien comprendre encore une fois... Le CONVERT modifie le type de ma colonne ou seulement modifie le format de la date tout en gardant le type varchar ?!

    En utilisant la fonction CONVERT je me retrouve avec le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*242, Niveau*16, État*3, Ligne*2
    La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
    En tant que pro d'SQL je sens, que ce petit va me rester dans les pattes longtemps lol !
    Est ce qu'il y faut que je change au préalable le format de date par défaut, ça n'a rien avoir ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET DATEFORMAT ymd
    GO
    SELECT CONVERT (datetime, macolonneDate, 112)
    FROM maTable
    Enfin ca change rien en tout cas... donc je suppose que non

    EIDT : je viens de trouver ca sur le net : http://wiki.lessthandot.com/index.ph...of-range_value

    J'ai essayé de modifier ma requête en fonction des indications du site mais rien y fait...

  13. #13
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Vous précisez le format (112) qui correspond à l'ISO.
    SQL SERVER va chercher à convertir votre varchar en partant du principe que celle-ci est sous la forme aaaammjj ou aammjj.

    Si ce n'est pas le cas vous avez le message d'erreur que vous citez...

  14. #14
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    SELECT CONVERT (datetime,macolonneDate, 112)
    FROM maTable

    vous devez donc préciser le format dans lequel vous avez stocké en varchar vos dates (pas bien au passage )

    voyez ceci:
    http://msdn.microsoft.com/fr-fr/library/ms187928.aspx

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par iberserk Voir le message
    vous devez donc préciser le format dans lequel vous avez stocké en varchar vos dates (pas bien au passage )
    Merci de ces précisions, j'ai parfaitement compris mnt !

    Je reviens tout de même sur le "pas bien au passage" car je souhaiterai justement, le faire le mieux possible.

    Pourriez vous m'expliciter votre pensé lorsque vous me dites cela ?
    Quel devrai être le format ?

    J'ai toujours voulu avoir mes champs dates dans le format le plus adapté . Lors de mon import y a t il un format de type de données que je devrai changer selon vous ??

    Merci de vos précisions @Iberserk

    EDIT :
    Au départ on m'avait dit de tout importer au mm format type et je vois d'après votre lien sur le support SQL Server que la Conversion est implicite de Varchar à Datetime !
    Pourquoi ça marche pas alors ? Mon format en varchar est aaaammjj donc 112 selon le tableau

    EDIT2 :
    C'est un truc du style qu'il faudrait faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CONVERT (varchar(8), macolonneDate, 112)
    FROM maTable
    GO
    SELECT CONVERT (datetime, macolonneDate, 112)
    FROM maTable
    GO
    Je rajoute encore une question :

    Lorsque les champs de ma colonne date seront converties au format "datetime" ma colonne initialement au format varchar() ne changera pas de format mais seulement les données à l'intérieur.
    Ce qui signifie que lorsque je vais charger macolonneDate de ma table TEMPORAIRE vers mes tables en base, le format de celle-ci devront/pourront être de type "Date" ?

    J'espère réussir à me faire comprendre...

    EDIT3 :

    Je viens de m'apercevoir que j'ai une date à 00000000 !! et il semblerai que se soit celle ci qui m'affiche l'erreur.
    En effet j'ai mes 3 première lignes qui sont converties puis à la 4eme j'ai mon unique et seul date à 0...
    N'y aurait-il pas un moyen de la prendre en compte comme 0000 00 00 ?

    Merci

  16. #16
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Merci de ces précisions, j'ai parfaitement compris mnt !

    Je reviens tout de même sur le "pas bien au passage" car je souhaiterai justement, le faire le mieux possible.

    Pourriez vous m'expliciter votre pensé lorsque vous me dites cela ?
    Quel devrai être le format ?

    J'ai toujours voulu avoir mes champs dates dans le format le plus adapté . Lors de mon import y a t il un format de type de données que je devrai changer selon vous ??

    Merci de vos précisions @Iberserk
    Autant pour moi vos dates sont en VARCHAR dans votre import...

    Le mieu est d'utiliser le format ISO aaaammjj

    Si c'est votre cas et que la conversion ne fonctionne pas c'est que vous avez des verrues dans vos données...

Discussions similaires

  1. Convertion string en date
    Par miabi dans le forum Développement
    Réponses: 4
    Dernier message: 13/01/2012, 09h46
  2. convertion d'un String en date dans jTextfield
    Par ra'uf dans le forum Composants
    Réponses: 5
    Dernier message: 03/06/2009, 13h29
  3. Convertion de String en Date("ddMMyy")
    Par Saten dans le forum C#
    Réponses: 12
    Dernier message: 23/10/2008, 15h04
  4. convertion d'une string en date
    Par robert_trudel dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 02/07/2008, 19h04
  5. hql: convertion de string en date
    Par osoumayaj dans le forum Hibernate
    Réponses: 3
    Dernier message: 04/01/2007, 13h17

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