Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/05/2011, 11h19   #1
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
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
Type de fichier : png flux de controle.PNG (83,2 Ko, 18 affichages)
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 11h27   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 11h59   #3
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
C'est bon j'ai complété avec les infos demandées dans mon premier message
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 14h41   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 15h09   #5
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
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 ?
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 10h56   #6
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
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
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 08h34   #7
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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...


Citation:
selon la manière officielle de faire
Il n'y a pas de manière officielle de faire...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 09h52   #8
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
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 ?
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 10h07   #9
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h03   #10
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
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 :
1
2
3
SELECT CONVERT (matable, 112) AS DATE ??
 
SELECT CAST (matable, 112) AS DATE ???
c'est un truc du genre ?

Merci d'avance
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 18h59   #11
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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

Citation:
SELECT CONVERT (matable, 112) AS DATE ??

SELECT CAST (matable, 112) AS DATE ???
Presque:
Code :
1
2
SELECT CONVERT (datetime,macolonneDate, 112)
FROM maTable
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 12h12   #12
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
Citation:
Envoyé par iberserk Voir le message
Oui


Presque:
Code :
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 :
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 :
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...
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 14h08   #13
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
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...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 14h09   #14
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 14h25   #15
Candidat au titre de Membre du Club
 
Homme Arnaud
Étudiant
Inscription : mars 2011
Messages : 60
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 60
Points : 11
Points : 11
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 :
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
bibouex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 15h47   #16
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h13.


 
 
 
 
Partenaires

Hébergement Web