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 une date de format alphabétique en une date de format numérique


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    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
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    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 averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    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
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    Par défaut
    Dois-tu lire des données depuis un fichier texte ?

  5. #5
    Membre averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    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 expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    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 : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    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
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  7. #7
    Membre averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    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: 4
    Dernier message: 19/11/2014, 16h44
  2. Parser une date suivi d'un fuseaux horaire (date+02:00) et conversion en Date.
    Par SpeedOverflow dans le forum Collection et Stream
    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