Vous n'êtes pas identifié(e).
Bonjour
J'ai une colonne avec le numéro du jour dans la semaine et j'aimerais convertir ces numéros en texte.
Exemple :
1 => Lundi
2 => Mardi
etc.
7 => Dimanche
J'essaye de faire comprendre à la fonction to_char() que mon 1er paramètre est un numéro de jour dans la semaine et que je veux le nom du jour correspondant :
select to_char(3, 'ID Day');
J'attends comme résultat : "Mercredi".
J'ai également essayé comme ça mais ça me ramène "Samedi" :
select to_char(to_date('3', 'ID'), 'Day');
Est-ce possible ?
Gôm
Dernière modification par gom (29/04/2015 11:24:59)
Hors ligne
Bonjour
Il y a tout ce qu'il faut là :
http://docs.postgresql.fr/9.3/functions-formatting.html
select to_char(current_timestamp, 'TMday');
Hors ligne
Bonjour
Mouais et comment je fais avec le numéro du jour dans la semaine en paramètre d'entrée ?
Dernière modification par gom (29/04/2015 14:27:06)
Hors ligne
Tu n'as pas la possibilité de récupérer la date directement ?
Sinon, tu peux soit monter une table avec la correspondance 1=lundi, 2=mardi.... ou utiliser une série de case when
Effectivement en cherchant un peu je n'ai pas trouvé de réponse plus simple (ce qui ne veut pas dire qu'il n'y en a pas!)
Hors ligne
Non malheureusement je n'ai pas la date. Juste le numéro du jour dans la semaine où a eu lieu l'intervention.
Le CASE WHEN c'est ce que j'ai fait en attendant, mais, pour ma culture , je voulais savoir s'il n'y avait pas un moyen plus propre.
Hors ligne
En dehors de créer une fonction, non.
Guillaume.
Hors ligne
Dommage car en SQL Server je crois que c'est possible.
Hors ligne
Oui, enfin, d'un autre côté, c'est pas non plus la mort.
create or replace function dow(p_day integer) returns text language sql
as $$
select case when p_day=1 then 'Lundi' when p_day=2 then 'Mardi' when p_day=3 then 'Mercredi' when p_day=4 then 'Jeudi' when p_day=5 then 'Vendredi' when p_day=6 then 'Samedi' when p_day=7 then 'Dimanche' else NULL end;
$$;
CREATE FUNCTION
select i, dow(i) from generate_series(1, 8) i;
i | dow
---+----------
1 | Lundi
2 | Mardi
3 | Mercredi
4 | Jeudi
5 | Vendredi
6 | Samedi
7 | Dimanche
8 |
(8 rows)
Deux minutes à écrire.
Guillaume.
Hors ligne
pas parfait, ce serait plus agréable avec 0001-01-00 comme date de départ ( mais ce n'est pas une date valide):
# prepare dow (int) as select to_char('0001-01-07'::date + $1,'Day');
# execute dow(1);
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation
Hors ligne