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 :

convertir un char(10) en int(10)


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Par défaut convertir un char(10) en int(10)
    bonjour, j'ai une table source et une table destination.
    source : num(varchar) et tps (char)
    destination : num (varchar) et tps (int)

    je souhaite appliquer une transformation du champs tps (table source)
    et l'ajouter transformé dans le champs tps (table destination).

    J'ai crée un lots DTS avec une tâche transformation de données entre ces deux tables.
    voici la requête que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO test (numero, temps)
    SELECT numero, [temps]*86400 AS tt
    FROM test_temp;
    Bon, oui c'est ridicule et en plus ça ne fonctionne pas!
    Il me sort une "erreur de syntaxe lors de la conversion varchar vers int".

    Il y a-t'il un moyen ou bien dois-je bricoler à travers un access qui sait faire cette conversion?

    Par avance merci.

  2. #2
    Expert confirmé
    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 : 46
    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
    Par défaut
    Bonjour

    Vous devez d'abord caster votre colonne de type char en int. Je suppose que votre colonne source n'a que des données en char pouvant être converti. A vérifier bien sur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO test (numero, temps)
    SELECT numero, CAST([temps] AS INT) *86400 AS tt
    FROM test_temp;
    ++

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Par défaut
    hum..
    merci pour ta réponse.

    mes données source sont des durées... du type 02:01:05
    et donc je les converti en secondes : 7265

  4. #4
    Expert confirmé
    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 : 46
    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
    Par défaut
    Ok, j'en sais un peu plus sur le contenu de vos données.

    Je vous met le code d'une fonction de conversion de vos données en INT.
    Attention je pars du principe que vos données dans la colonne source sont toujours du type XX:XX:XX.

    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
     
    CREATE FUNCTION dbo.convertDureeSecondes (@temp CHAR(10))
    RETURNS INT
    BEGIN
     
    	RETURN CAST(DATEPART(hh,CONVERT(DATETIME,@temp,103)) * 3600 + 
    			DATEPART(mi,CONVERT(DATETIME,@temp,103)) * 60 + 
    			DATEPART(ss,CONVERT(DATETIME,@temp,103)) AS INT)
    END
    GO
     
    DECLARE @temp CHAR(10)
    SET @temp = '02:01:05'
     
    SELECT dbo.convertDureeSecondes(@temp);
    Dans votre cas ca donnera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO test (numero, temps)
    SELECT numero, dbo.convertDureeSecondes([temps]) AS tt
    FROM test_temp;
    ++

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Par défaut
    géniale!
    merci beaucoup pour tes réponses qui m'enlèvent une belle écharde!
    encore bravo.


  6. #6
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Par défaut
    je me retourne vers vous...
    Donc j'ai réussi (difficilement) à adapter cette fonction à ma base.

    petit soucis :
    certains champs dépassent les 24h00 donc :

    La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et d'heure.
    Connaitriez-vous un truc pour passer outre de cette limitation?

    (je suis en ms sql 2000 donc très mauvaise gestion des dates/heures...)

    Par avance merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir un char en int
    Par boby666 dans le forum C
    Réponses: 4
    Dernier message: 30/12/2007, 11h08
  2. Convertir un char en int
    Par Panaméen dans le forum C
    Réponses: 8
    Dernier message: 30/12/2007, 10h14
  3. [(cast)] convertir un char en int...
    Par APoLLoN1234 dans le forum C++
    Réponses: 12
    Dernier message: 15/03/2006, 23h15
  4. convertir un char en int / et prob d'espace
    Par yanchasp dans le forum C++
    Réponses: 20
    Dernier message: 07/02/2006, 19h17
  5. [Conversion]Convertir un char[] en int
    Par ThanosT dans le forum Général Java
    Réponses: 10
    Dernier message: 11/11/2005, 12h23

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