Nuestros mejores investigadores han agotado sus provisiones de café, buscando a tiempo completo por la respuesta, hasta que Pedro halló la contestación en Bitbucket por lo tanto en este momento la compartimos con nosotros.
Solución:
La respuesta de Florin es cómo lo haría yo, pero debes tener un poco de cuidado con la configuración de NLS. El día de la semana se ve afectado por el territorio NLS, por lo que si ejecuto esto como si estuviera en los EE. UU., funciona:
alter session set nls_territory = 'AMERICA';
select to_char(sysdate, 'D') as d, to_char(sysdate, 'Day') as day from dual;
D DAY
- ------------------------------------
6 Friday
select level as dow,
to_char(trunc(sysdate ,'D') + level, 'Day') as day
from dual
connect by level <= 7;
DOW DAY
--- ------------------------------------
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
Pero la misma consulta ejecutada en el Reino Unido es un día libre:
alter session set nls_territory = 'UNITED KINGDOM';
select to_char(sysdate, 'D') as d, to_char(sysdate, 'Day') as day from dual;
D DAY
- ------------------------------------
5 Friday
select level as dow,
to_char(trunc(sysdate ,'D') + level, 'Day') as day
from dual
connect by level <= 7;
DOW DAY
--- ------------------------------------
1 Tuesday
2 Wednesday
3 Thursday
4 Friday
5 Saturday
6 Sunday
7 Monday
... y necesito ajustar el cálculo para corregir eso:
select level as dow,
to_char(trunc(sysdate ,'D') + level - 1, 'Day') as day
from dual
connect by level <= 7;
DOW DAY
--- ------------------------------------
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
También puede especificar el idioma utilizado para los nombres de los días por separado si lo desea:
select level as dow,
to_char(trunc(sysdate ,'day') + level - 1, 'Day',
'NLS_DATE_LANGUAGE=FRENCH') as day
from dual
connect by level <= 7;
DOW DAY
--- --------------------------------
1 Lundi
2 Mardi
3 Mercredi
4 Jeudi
5 Vendredi
6 Samedi
7 Dimanche
Documentación para to_char()
con nls_date_language
y día de la semana, y más en la guía de soporte de globalización.
select level as dow,
to_char(level+trunc(sysdate,'D'),'Day') as day
from dual
connect by level <= 7;
Te mostramos comentarios y puntuaciones
Si te gustó nuestro trabajo, tienes el poder dejar una división acerca de qué le añadirías a este tutorial.