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

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

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

    Bonjour,

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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
    240
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 240
    Points : 180
    Points
    180

    Par défaut

    C'est un problème de code langue.

    Exécute ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 29

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

    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
    240
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 240
    Points : 180
    Points
    180

    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 : 29

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

    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 chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2003
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 406
    Points : 753
    Points
    753
    Billets dans le blog
    2

    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 29

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

    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.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/11/2014, 16h44
  2. Réponses: 1
    Dernier message: 30/06/2013, 13h37
  3. Réponses: 3
    Dernier message: 14/08/2012, 10h24
  4. Réponses: 4
    Dernier message: 05/05/2011, 13h46
  5. [Date][SQL date][Format] insertion d'une heure
    Par goulime dans le forum JDBC
    Réponses: 11
    Dernier message: 26/01/2004, 11h38

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