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

SQL Firebird Discussion :

STRFTIME dans CASE


Sujet :

SQL Firebird

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut STRFTIME dans CASE
    Bonjour,
    Dans le cadre d'une formation, je m'initie aux joies de SQL, version débutant ! J'utilise ce site (https://fxjollois.github.io/cours-sql/), très bien fait d'ailleurs, qui propose des exercices, mais sans réponses. D'où ma question...
    On me demande de :
    "Afficher le jour de la semaine en lettre pour toutes les dates de commande" d'une table "commande"
    Je viens de voir les différents attributs de STRFTIME, mais pour moi, ils ne renvoient que des nombres. Par exemple, le %w qui m'intéresse ne renvoie que 0 à 6. Comme on me demande un jour en lettres et que je ne trouve pas l'attribut qui correspond (s'il y en a un, je suis preneur d'ailleurs !) je fais un CASE (ci-dessous, je n'ai pas mis tous les jours de la semaine, histoire de simplifier...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DateCom,
    STRFTIME ("%w","DateCom"),
    CASE 
        WHEN STRFTIME("%w","DateCom")==0 THEN "Dimanche"
        WHEN STRFTIME("%w","DateCom")==6 THEN "Samedi"
        ELSE "Semaine"
    END AS Jour
    FROM Commande;
    Résultat peu probant : je n'ai que des "semaine" qui s'affichent. Donc ma condition CASE n'est jamais prise en compte.
    Quelqu'un peut-il me dire d'où vient l'erreur svp ? 

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    STRFTIME n'est pas, à ma connaissance, une fonction Firebird interne, je pencherai pour une erreur de forum ?
    Voici ce qui est possible avec Firebird et ses fonctions internes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CASE EXTRACT(WEEKDAY FROM CURRENT_DATE) 
       WHEN 0 THEN 'Dimanche'
       WHEN 1 THEN 'Lundi'
       WHEN 2 THEN 'Mardi'
       WHEN 3 THEN 'Mercredi'
       WHEN 4 THEN 'Jeudi'
       WHEN 5 THEN 'Vendredi'
       WHEN 6 THEN 'Samedi'
       ELSE 'Extradi' -- plaisanterie
    END Jour
    FROM RDB$DATABASE
    l'équivalent SQLite serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT CASE STRFTIME('%w',CURRENT_DATE) 
       WHEN '0' THEN 'Dimanche'
       WHEN '1' THEN 'Lundi'
       WHEN '2' THEN 'Mardi'
       WHEN '3' THEN 'Mercredi'
       WHEN '4' THEN 'Jeudi'
       WHEN '5' THEN 'Vendredi'
       WHEN '6' THEN 'Samedi'
    END Jour
    votre/vos erreur(s) possible(s)
    STRFTIME ("%w","DateCom"), "DateCom" n'est pas une date contrairement à STRFTIME ("%w",DateCom)
    Le test STRFTIME("%w",DateCom)==0 devrait en SQL être STRFTIME("%w",DateCom)='0' (je ne suis pas expert SQLite mais STRFTIME semble renvoyé un chaine et non un entier (du moins d'après mes tests)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Effectivement, erreur de forum (je l'ai vu trop tard...).
    Ceci dit, la réponse apportée est bonne ! Un grand merci !!!

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

Discussions similaires

  1. portage de code select dans case
    Par jolatouf dans le forum Adaptive Server IQ
    Réponses: 2
    Dernier message: 09/10/2008, 15h03
  2. help : sous requête dans CASE
    Par citt_jr dans le forum Développement
    Réponses: 3
    Dernier message: 19/08/2008, 10h54
  3. Réponses: 7
    Dernier message: 30/07/2008, 18h51
  4. [TP] Jeu bille qui tombe dans case
    Par stabiloboss dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 09/06/2007, 10h21
  5. [select dans case] reconnaitre un champ d une table liée
    Par the_edge dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 22/10/2004, 16h47

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