qlq connait comment récupérer le jour de la semaine? [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 15-07-2003 à 18:04:00
Argh, mince, WI, c'est le numéro de la semaine dans l'année
Bah... WD je crois, mais j'en suis pas sûr du tout
Marsh Posté le 15-07-2003 à 18:08:27
Presque
C'est 'D' :
to_char(to_date('15/07/2003', 'DD/MM/YYYY'), 'D')
1-lundi,
2-mardi,
...
7-dimanche
Marsh Posté le 15-07-2003 à 18:16:02
http://spdoc.cineca.it/oracle8i/se [...] .htm#34926
Marsh Posté le 15-07-2003 à 20:03:01
Mara's dad a écrit : Presque |
pour le nombre retourné, ça dépendra de la locale paramètrée dans la base.
Marsh Posté le 15-07-2003 à 21:33:56
Ouf...merci pour votre coup de pouce
Je vais tester/valider demain
oups93
Marsh Posté le 15-07-2003 à 22:04:06
MagicBuzz a écrit : |
Je m'en doutais, mais j'ai pas essayé de changer pour voir !
Avec Oracle de toute façon, on peut lui faire faire un peu ce qu'on veut.
Marsh Posté le 15-07-2003 à 22:43:47
Mara's dad a écrit : |
Le seul truc chiant, c'est que l'utilisateur peut choisir une local spécifique, rien que pour sa session, et elle vient écraser la local paramètrée dans la base. Alors pour pas planter, tu t'accroches comme tu peux aux flocons de neige
Marsh Posté le 15-07-2003 à 22:47:40
Y'a pas moyen de récupérer la valeur de 'local' pour juste la changer avant et la remettre après ?
Marsh Posté le 15-07-2003 à 23:04:12
y'a certainement moyen, mais j'ai jamais eu à le faire (je bosse uniquement depuis des scripts batch ou des pages web, donc je maîtrise la locale utilisée par l'utilisateur (celle de la base), et vu que j'utilise une base sur laquelle est pluggé un ERP, à priori, la locale de la base est pas prêt de changer
Marsh Posté le 16-07-2003 à 11:15:57
La valeur retournée par 'DAY' dépend du paramètre NLS_DATE_LANGUAGE
La valeur retournée par 'D' dépends de NLS_TERRITORY.
Les valeurs des paramètres de la session peuvent être lus par :
select * from V$NLS_PARAMETERS;
ou
select * from NLS_SESSION_PARAMETERS;
En revanche, pour les modifier, il faut utiliser :
ALTER SESSION SET NLS_...=...;
Changer NLS_DATE_LANGUAGE est simple, ce paramètre n'en affecte pas d'autres, en revanche, changer NLS_TERRITORY pose problème car il en modifie plein d'autres.
Malheureusement, le 'week start day' n'est pas un paramètre. Il n'est pas possible de le changer ni même de l'interroger. Il dépend seulement du NLS_TERRITORY
La seule solution c'est de faire un essai sur une date de référence.
Pour une fois, je trouve çà nul !
Marsh Posté le 16-07-2003 à 14:09:40
Mara's dad a écrit : Y'a pas moyen de récupérer la valeur de 'local' pour juste la changer avant et la remettre après ? |
to_char(to_date('15/07/2003', 'DD/MM/YYYY'), 'DAY', 'NLS_DATE_LANGUAGE = English')
Ton local est utilisé uniquement pour la requte et n'interfere pas avec la config de la base.
Marsh Posté le 16-07-2003 à 14:39:20
Ok, pour 'DAY' çà marche, mais pour 'D' tu fais comment !
En france, 1->lundi ... 7-> dimanche
Aux USA, 1->dimanche ... 7-> samedi
Les autres, je ne sait pas, et je n'ai pas trouvé l'info dans la doc Oracle.
Remarque : y'a qu'à tous les essayer
Et t'as beau mettre 'NLS_DATE_LANGUAGE = ce que tu veux' çà ne changera rien. c'est NLS_TERRITORY qu'il faut changer ou interroger. Et tu peut pas le changer dans la fonction TO_CHAR() !
Marsh Posté le 16-07-2003 à 15:06:18
Solution qui peux paraitre inélégante mais qui est pourtant éfficace. C'est creer une table de correspondance
Lundi -> 1
Mardi -> 2
etc ...
et de faire la jointure pour une requete contenant un to_char(...,'DAY', ...french..) . L'inconvénient est que si l le champ contenant la date est indexé alors il risque de ne pas servir.
Il ya aussi la possiblité de faire un DECODE('LUNDI',1,'MARDI', 2) etc..
Marsh Posté le 16-07-2003 à 15:09:51
Les solutions, c'est sûr qu'il y en as, mais c'est juste que y'a une fonction qui le fait, alors c'est con, c'est tout
Marsh Posté le 17-07-2003 à 16:00:44
La solution la plus simple est de pas se prendre la tête :
Tu fais le traîtement dans le langage qui récupère les infos de la BDD (à moins évidement que tu sortes pas d'Oracle, à ce moment, t'es dans la merde, mais bon, faut être maso pour bosser avec les produits Oracle - mise à part la base)
Pour une proc-stock, perso, je vois pas trop l'intérêt de récupérer cette valeur, récupérer l'intitulé du jour de la semaine suffit, et y'a pas de confusion possible
Marsh Posté le 17-07-2003 à 16:04:12
ici on fait ça dans nos scripts SQL Par exemple, ça marche tout seul, et c'est pas plus porc que le reste, m'enfin Oracle n'a qu'à faire des trucs propres, ça les changera pour une fois...
select round((sum((fac.prxvdu*fac.qtecde)/chg.pivchg)),2) as TOT_INV_LD,
'NNE' as ETB
from detchg chg, detfac fac
where chg.devpiv = 'USD' and chg.datval = to_char(sysdate, 'yyyy')||'0101'
and chg.coddev = fac.coddev
and ((fac.datval = to_char(SYSDATE-1, 'yyyymmdd') and to_char(SYSDATE-1, 'day') not in ('sunday ','saturday '))
or (fac.datval = to_char(SYSDATE-3, 'yyyymmdd') and to_char(SYSDATE-1, 'day') in ('sunday ','saturday ')))
and fac.prxvdu <> 0 and fac.etbcod = 'UK'
and fac.sigcli not in ('014135','018211','020979','020045','014140','017688','017875','500436','019590','019896','019897', '015371', '019965')
Marsh Posté le 15-07-2003 à 17:42:40
Bonjour,
quelqu'un connait la fonction pour récupérer le numéro du jour de la semaine ex mardi 15/07/2003 = '2' (ou 3 ça dépend des système je crois...)
Je précise que c'est sur Oracle.
Merci d'avance pour votre aide
Oups93 (qui cherche depuis plus de 2 heures...)