Изменить столбец для поиска в соответствии с днем ​​недели - PullRequest
0 голосов
/ 24 июня 2019

Мне нужно запросить базу данных Oracle, чтобы получить данные из таблицы в соответствии с днем ​​недели.

Если это понедельник, мне нужно запросить FL_PO_LUN, если это вторник, мой запрос будетбыть на FL_PO_MAR и т. д.

Это запрос, который я пытаюсь использовать.

SELECT DISTINCT(DEPCOD),ENTECOD FROM RIO_PLA_DEP WHERE
DT_INIZIO_VAL <= trunc(sysdate) AND
DT_FINE_VAL >= trunc(sysdate) AND 
(SELECT DECODE( 
TO_CHAR(SYSDATE,'d'),
'1','FL_PO_LUN',
'2','FL_PO_MAR',
'3','FL_PO_MER',
'4','FL_PO_GIO',
'5','FL_PO_VEN',
'6','FL_PO_SAB',
'7','FL_PO_DOM') AS DAY_OF_WEEK
FROM DUAL) = 1;

Оператор декодирования работает нормально, но весь оператор не будет работать.На самом деле я получаю ошибку ORA-01722.

Ожидаемый результат будет:

SELECT DISTINCT(DEPCOD),ENTECOD FROM RIO_PLA_DEP WHERE
DT_INIZIO_VAL <= trunc(sysdate) AND
DT_FINE_VAL >= trunc(sysdate) AND 
FL_PO_LUN = 1;

1 Ответ

0 голосов
/ 24 июня 2019

Кавычки вокруг имен столбцов. В настоящее время вы пытаетесь сравнить char с int типом. Это невозможно, так как FL_PO_LUN и другие константы типа char не представляют int.

SELECT DISTINCT(DEPCOD),ENTECOD 
FROM RIO_PLA_DEP 
WHERE
    DT_INIZIO_VAL <= trunc(sysdate) AND
    DT_FINE_VAL >= trunc(sysdate) AND 
    (SELECT DECODE( 
    TO_CHAR(SYSDATE,'d'),
    '1',FL_PO_LUN,
    '2',FL_PO_MAR,
    '3',FL_PO_MER,
    '4',FL_PO_GIO,
    '5',FL_PO_VEN,
    '6',FL_PO_SAB,
    '7',FL_PO_DOM) AS DAY_OF_WEEK
    FROM DUAL) = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...