Saltar al contenido

Usando Oracle SQL, ¿cómo se genera el número de día de la semana y el día de la semana?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *