Oracle
 sql >> база данни >  >> RDS >> Oracle

Използвайки Oracle SQL, как един ден извежда номер на седмицата и ден от седмицата?

Отговорът на Флорин е как бих го направил, но трябва да внимавате малко с настройките на NLS. Денят от седмицата се влияе от територията на NLS, така че ако стартирам това, сякаш съм в САЩ, работи:

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

Но същата заявка в Обединеното кралство е почивен ден:

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

... и трябва да коригирам изчислението, за да коригирам това:

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

Можете също да посочите езика, използван за имената на дните отделно, ако желаете:

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

Документация за to_char() с nls_date_language и ден от седмицата и още в ръководството за поддръжка на глобализация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - присъединяване към актуализиране - таблица без ключ

  2. Игнорирайте параметъра за период от време в клаузата where, когато параметърът не е въведен

  3. Oracle SQL - Как да извлечете най-високите 5 стойности на колона

  4. Как да изберете колони от таблица, които имат стойности, различни от null?

  5. Обединете XMLType възли в заявка на Oracle