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

AS/400 Discussion :

Convertir une date en varchar


Sujet :

AS/400

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut Convertir une date en varchar
    Bonjour,

    Dans une procédure stockée SQL sur l'as400 j'aimerais convertir un champs de type date en chaine de caractère au format "YYYYMMDDHHMMSS"

    dans la doc j'ai trouvé ceci mais ca ne marche pas :

    SELECT VARCHAR_FORMAT(RECEIVED,'YYYY-MM-DD HH24:MI:SS')
    INTO :TVAR
    FROM CORPDATA.IN_TRAY
    en l'adaptant à mon cas ca donne :

    SELECT VARCHAR_FORMAT(palet_date,'YYYY-MM-DD HH24:MI:SS')
    FROM TOTO/PAL
    en voulant le tester dans strsql il me dis : "L'argument 1 de la fonction VARCHAR_FORMAT est incorrect. " pourtant l'argument 1 est un champs de type date.... je ne comprend pas

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    hmm, un type date c'est AAAA-MM-JJ.

    Et la ta fonction demande un timestamp en argument 1.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    SELECT ... CAST(palet_date as TIMESTAMP) ...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    merci d'avoir pris le temps de me répondre

    oui je viens d'essayer avec ca :

    select varchar_format (timestamp_iso (palet_date), 'YYYY-MM-DD HH24:MI:SS')
    ca marche, sauf que moi j'aimerais avoir par exemple "20100923144758" au lieu de "2010-09-23 14:47:58"
    et si je remplace le format 'YYYY-MM-DD HH24:MI:SS' par 'YYYYMMDDHHMISS' et bah ca ne marche plus

    Edit :

    Mercure : Merci je ne connaissais pas mais ca ne regle pas mon probleme apparement...

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Peut être que Mercure a une solution plus classe, mais sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT YEAR(ma_date) || MONTH(ma_date) || DAY(ma_date) || '000000'
    FROM ma_table

    Pi tiens par ici il y a un article sympa sur les dates / timestamp
    http://www.ibm.com/developerworks/da.../0211yip3.html

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Merci, ta solution m'a l'air plutôt sympas, sauf que (désolé de faire le boulet ) :

    pour le mois "1" j'aimerais qu'il me mette "01" et non "1"

    par exemple pour la date 08/02/2010 j'aimerais avoir 20100208 et non 201028...

    pas facile...

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Il faut du coup passer par des substring :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select substr(char(current date), 1, 4) || substr(char(current date), 6, 2) || substr(char(current date), 9, 2) || '000000' 
    from sysibm.sysdummy1

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    oui c'était justement ce que je voulais éviter car je trouve ca bof

    dans ton lien j'ai trouvé ca :

    Custom Date/Time Formatting

    In the last example, we demonstrated how to change the way DB2 presents dates in some localized formats. But what if you wish to have a custom format such as 'yyyymmdd'? The best way to do this is by writing your own custom formatting function.

    Here is the UDF:


    create function ts_fmt(TS timestamp, fmt varchar(20))
    returns varchar(50)
    return
    with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as
    (
    select
    substr( digits (day(TS)),9),
    substr( digits (month(TS)),9) ,
    rtrim(char(year(TS))) ,
    substr( digits (hour(TS)),9),
    substr( digits (minute(TS)),9),
    substr( digits (second(TS)),9),
    rtrim(char(microsecond(TS)))
    from sysibm.sysdummy1
    )
    select
    case fmt
    when 'yyyymmdd'
    then yyyy || mm || dd
    when 'mm/dd/yyyy'
    then mm || '/' || dd || '/' || yyyy
    when 'yyyy/dd/mm hh:mi:ss'
    then yyyy || '/' || mm || '/' || dd || ' ' ||
    hh || ':' || mi || ':' || ss
    when 'nnnnnn'
    then nnnnnn
    else
    'date format ' || coalesce(fmt,' <null> ') ||
    ' not recognized.'
    end
    from tmp
    donc apparement il n'y a pas d'autre solution que de faire des substr
    je vais faire comme ca

    merci pour votre aide...

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Il n'y a pas de solution simple ni classieuse à ce que je sache pour traiter un cas un peu compliqué quand même qui n'adhère pas aux standards.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select 
     Cast(Replace(Char(Date(palet_date), ISO), '-', '') as char(8))  
     Concat                                                            
     Cast(Replace(Char(Time(Current timestamp), ISO), '.', '')  as char(6) )
    ...
    C'est un tantinet lourdeau quand même !

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    ben oui je trouve aussi mais bon...

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Mais est-ce que ça marche chez toi ?

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    désolé, oui ca marche tres bien

    je ne sais pas laquelle des deux solutions je vais utiliser...

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    En fait celà dépend de ta version.
    la fonction VARCHAR_FORMAT() ou son synonyme TO_CHAR() est apparue en V5R4 sous sa forme de base et a été réellement implémentée en V6R1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT VARCHAR_FORMAT(NOW(), 'YYYYMMDDHH24MISS')
    from sysibm/sysdummy1
    marche très bien et donne bien 20100923160043

    Pour obtenir ce même résultat avant la V6R1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT replace(replace(left(char(NOW()), 19), '-', ''), '.', '') 
    from sysibm/sysdummy1

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    alors là je ne sais pas en quelle version je suis mais j'ai déja éssayé ca :

    VARCHAR_FORMAT(NOW(), 'YYYYMMDDHH24MISS')

    et ca ne marche pas. la fonction varchar_format et to_char existent bien mais c'est ce format là qu'il n'aime pas, je suis surement dans une version antérieure à la V6R1 alors

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Pour connaître ta version de l'OS, sur une ligne de commande tapes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DSPDTAARA QUSRSYS/QSS1MRI

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Je suis en V5R4M000...

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Alors il faudra te contenter d'une fonction avec des REPLACE imbriqués ou autre

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

Discussions similaires

  1. Convertir une date varchar en format date
    Par abdelkarim_1987 dans le forum Langage
    Réponses: 4
    Dernier message: 02/10/2013, 12h00
  2. Réponses: 6
    Dernier message: 19/01/2007, 14h21
  3. []Comment convertir une date GMT en date vb ?
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 11/08/2004, 16h01
  4. Convertir une date au format excel en datetime SQL server
    Par ALLB dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/07/2004, 11h28
  5. Convertir une date en type string
    Par ziboux dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2003, 10h52

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