[SQL] qlq connait comment récupérer le jour de la semaine?

qlq connait comment récupérer le jour de la semaine? [SQL] - SQL/NoSQL - Programmation

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...)

Reply

Marsh Posté le 15-07-2003 à 17:42:40   

Reply

Marsh Posté le 15-07-2003 à 18:03:07    

to_char(to_date('15/07/2003', 'DD/MM/YYYY'), 'WI')

Reply

Marsh Posté le 15-07-2003 à 18:04:00    

Argh, mince, WI, c'est le numéro de la semaine dans l'année :D
 
Bah... WD je crois, mais j'en suis pas sûr du tout

Reply

Marsh Posté le 15-07-2003 à 18:08:27    

Presque :D  
 
C'est 'D' :
 
to_char(to_date('15/07/2003', 'DD/MM/YYYY'), 'D')
 
1-lundi,
2-mardi,
...
7-dimanche


Message édité par Mara's dad le 15-07-2003 à 18:08:38

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-07-2003 à 18:16:02    

http://spdoc.cineca.it/oracle8i/se [...] .htm#34926


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-07-2003 à 20:03:01    

Mara's dad a écrit :

Presque :D  
 
C'est 'D' :
 
to_char(to_date('15/07/2003', 'DD/MM/YYYY'), 'D')
 
1-lundi,
2-mardi,
...
7-dimanche


pour le nombre retourné, ça dépendra de la locale paramètrée dans la base.

Reply

Marsh Posté le 15-07-2003 à 21:33:56    

Ouf...merci pour votre coup de pouce
Je vais tester/valider demain
 
oups93

Reply

Marsh Posté le 15-07-2003 à 22:04:06    

MagicBuzz a écrit :


pour le nombre retourné, ça dépendra de la locale paramètrée dans la base.


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.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-07-2003 à 22:43:47    

Mara's dad 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.


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 :D

Reply

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 ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-07-2003 à 22:47:40   

Reply

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 :D


Message édité par MagicBuzz le 15-07-2003 à 23:05:04
Reply

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 :fou:
 
La seule solution c'est de faire un essai sur une date de référence.
 
Pour une fois, je trouve çà nul !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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.

Reply

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 :D  
 
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() !
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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..

Reply

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 :(


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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 :)

Reply

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')

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed