Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre actif Avatar de witch
    Inscrit en
    mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 28

    Informations forums :
    Inscription : mai 2007
    Messages : 346
    Points : 160
    Points
    160

    Par défaut Convertir une date de format alphabétique en une date de format numérique

    Bonjour,

    exemple :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT convert(varchar,convert(varchar,'Jan  9 1956 12:00AM',100),103) => ça renvoie 'Jan  9 1956 12:00AM'
    SELECT convert(varchar,cast('Jan  9 1956 12:00AM' AS datetime) ,103) => ça renvoie Erreur de conversion 
     
    SET DATEFORMAT DMY
    SELECT datepart(year,'23/09/2010') 'YEAR', datepart(month,'23/09/2010') 'Month', datepart(day,'23/09/2010') 'Day'
    SET DATEFORMAT MDY
    SELECT datepart(year,'Mar 11 1951 12:00AM') 'YEAR', datepart(month,'Jan  9 1956 12:00AM') 'Month', datepart(day,'23/09/2010') 'Day' =>renvoie Erreur de conversion
    la valeur est considérée comme une chaine de caractère, comment peut on faire comprendre au système qu'il s'agit d'une date?

    pour l'instant je fais par exemple :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT  (
    substring('Mar 11 1951 12:00AM',5,2)+'/'+
    case  substring('Mar 11 1951 12:00AM',1,3) 
    when 'Jan' then '01' 
    when 'Fev' then '02' 
    when 'Mar' then '03' 
    when 'Apr' then '04' 
    when 'Mai' then '05' 
    when 'Jun' then '06' 
    when 'Jul' then '07' 
    when 'Aug' then '08' 
    when 'Sep' then '09' 
    when 'Oct' then '10' 
    when 'Nov' then '11' 
    when 'Dec' then '12' 
    End +'/'+
    substring('Mar 11 1951 12:00AM',8,4)) 
    AS datetime
    je n'aime pas beaucoup ça, y a t-il un moyen de conversion plus pratique?

    ++
    If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.

  2. #2
    Membre actif
    Inscrit en
    janvier 2008
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 238
    Points : 165
    Points
    165

    Par défaut

    C'est un problème de code langue.

    Exécute ce code :

    Code :
    1
    2
    3
    4
     
    DECLARE @Date AS datetime
    SET @date = '01/02/2010 00:00'
    SELECT CONVERT(varchar, @date,0)
    Si ton SQL server est en français, le résultat sera févr 1 2010 12:00AM

    Si tu exécute ensuite :

    Code :
    1
    2
     
    SELECT CONVERT(datetime, 'févr 01 2010 00:00AM',100)
    Tu obtients 2010-02-01 00:00:00.000.

    "févr" est bien interprété, mais pas "feb" (de l'anglais february) qui n'est pas reconnu.

  3. #3
    Membre actif Avatar de witch
    Inscrit en
    mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 28

    Informations forums :
    Inscription : mai 2007
    Messages : 346
    Points : 160
    Points
    160

    Par défaut

    Bonjour Philippe,

    tu as raison, le system est français mais la date que je dois convertir est en anglais, y a t-il un moyen de faire avec? en changeant par exemple la langue utilisé sur le serveur? existe t-il peut être une procédure système à utiliser pour ça?
    If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.

  4. #4
    Membre actif
    Inscrit en
    janvier 2008
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 238
    Points : 165
    Points
    165

    Par défaut

    Dois-tu lire des données depuis un fichier texte ?

  5. #5
    Membre actif Avatar de witch
    Inscrit en
    mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 28

    Informations forums :
    Inscription : mai 2007
    Messages : 346
    Points : 160
    Points
    160

    Par défaut

    Citation Envoyé par Philippe Robert Voir le message
    Dois-tu lire des données depuis un fichier texte ?
    oui c'est ça
    If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.

  6. #6
    Membre éclairé
    Homme Profil pro Hamid MIRA
    Ingénieur développement logiciels
    Inscrit en
    septembre 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Nom : Homme Hamid MIRA
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2003
    Messages : 245
    Points : 393
    Points
    393

    Par défaut

    Bonjour. Voilà une procédure qui résout ton problème. Celle-ci a 2 paramètres.
    - Le premier (IN) ,de type varchar(8000), représentant une date exprimée sous forme d’une chaine de caractères en anglais (exemple 'Jul 18 2010 10:35AM')
    - Le 2ème paramètre (OUT) représentant le résultat, de type DateTime, de la transformation de la chaine préalablement passée dans le 1er paramètre.

    Code :
    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
    CREATE PROCEDURE dbo.SP_U_StrDateEnglishToDateTime( 
      @pi_StrDateEnglish VARCHAR(8000), 
      @po_DateTime DATETIME OUT 
      ) 
    AS 
    BEGIN 
      SET NOCOUNT ON;  
     
      DECLARE @Language_old SYSNAME; 
     
      -- On sauvegarde la langue de la session en cours 
      SET @Language_Old  = @@LANGUAGE 
     
      -- On change la langue de la session en cours si différente de us_english 
      IF @Language_Old <> 'us_english' 
        SET LANGUAGE us_english; 
     
      -- On convertie dans le paramètre OUT (@po_DateTime) la chaine en une valeur de type DATETIME 
      IF ISDATE(@pi_StrDateEnglish) = 1  
        SET @po_DateTime = CONVERT(DATETIME, @pi_StrDateEnglish, 100)
      ELSE 
        SET @po_DateTime = NULL ; 
     
       -- On restaure la langue de la session à son état initial 
       IF @@LANGUAGE <> @Language_Old  
        SET LANGUAGE @Language_Old
     
      RETURN 
     
    END
    GO
    Ci-dessous un exemple d’utilisation de la procédure :
    Code :
    1
    2
    3
    4
    5
    6
    7
    DECLARE @StrDateEnglish varchar(8000), 
              @DateTime   datetime; 
      SET @StrDateEnglish = 'Jul 18 2010 10:35AM'; 
      EXEC dbo.SP_U_StrDateEnglishToDateTime 'Jul 18 2010 10:35AM', @DateTime OUT ; 
     
      PRINT '@DateTime = ' + convert(varchar, @DateTime, 120 ) 
      PRINT '@@language = ' + @@LANGUAGE -- juste pour vérifier la langue en cours après traitement
    Résulat :
    Code :
    1
    2
    @DateTime = 2010-07-18 10:35:00
    @@LANGUAGE  = Français

  7. #7
    Membre actif Avatar de witch
    Inscrit en
    mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 28

    Informations forums :
    Inscription : mai 2007
    Messages : 346
    Points : 160
    Points
    160

    Par défaut

    Bonjour hmira,

    C'est exactement ce que je cherchais comme technique, le mot clé est bien la langue system

    Merci
    If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •