Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2339 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°458565
oups93
tout le monde fait des erreurs
Posté le 15-07-2003 à 17:42:40  profilanswer
 

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

mood
Publicité
Posté le 15-07-2003 à 17:42:40  profilanswer
 

n°458593
MagicBuzz
Posté le 15-07-2003 à 18:03:07  profilanswer
 

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

n°458595
MagicBuzz
Posté le 15-07-2003 à 18:04:00  profilanswer
 

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

n°458600
Mara's dad
Yes I can !
Posté le 15-07-2003 à 18:08:27  profilanswer
 

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é.
n°458610
Mara's dad
Yes I can !
Posté le 15-07-2003 à 18:16:02  profilanswer
 

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


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°458713
MagicBuzz
Posté le 15-07-2003 à 20:03:01  profilanswer
 

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.

n°458813
oups93
tout le monde fait des erreurs
Posté le 15-07-2003 à 21:33:56  profilanswer
 

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

n°458847
Mara's dad
Yes I can !
Posté le 15-07-2003 à 22:04:06  profilanswer
 

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é.
n°458880
MagicBuzz
Posté le 15-07-2003 à 22:43:47  profilanswer
 

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

n°458886
Mara's dad
Yes I can !
Posté le 15-07-2003 à 22:47:40  profilanswer
 

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é.
mood
Publicité
Posté le 15-07-2003 à 22:47:40  profilanswer
 

n°458906
MagicBuzz
Posté le 15-07-2003 à 23:04:12  profilanswer
 

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
n°459189
Mara's dad
Yes I can !
Posté le 16-07-2003 à 11:15:57  profilanswer
 

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é.
n°459308
phnatomass
Je m'empare de ton esprit !!
Posté le 16-07-2003 à 14:09:40  profilanswer
 

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.

n°459371
Mara's dad
Yes I can !
Posté le 16-07-2003 à 14:39:20  profilanswer
 

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é.
n°459403
phnatomass
Je m'empare de ton esprit !!
Posté le 16-07-2003 à 15:06:18  profilanswer
 

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

n°459414
Mara's dad
Yes I can !
Posté le 16-07-2003 à 15:09:51  profilanswer
 

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é.
n°460520
MagicBuzz
Posté le 17-07-2003 à 16:00:44  profilanswer
 

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

n°460526
MagicBuzz
Posté le 17-07-2003 à 16:04:12  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
[SQL] Requete qui compte un maximum...Temps de transfert Base Access ...SQL serveur
[SQL] simple reqete (jointure ) et optimisationRécupérer des valeurs dans un fichier
[PHP/SQL] SELECT pour intervalle de A-M et N-Z[SQL] Récupérer l'id auto-incrémenté lors d'un INSERT
variable tableau dans requete SQLSQL count(*) [newbie inside]
Optimisation - Ne pas mettre à jour en temps réel 
Plus de sujets relatifs à : [SQL] qlq connait comment récupérer le jour de la semaine?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR