更改列以根据星期几进行搜索

时间:2019-06-24 08:41:14

标签: sql oracle select

我必须查询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;

Decode语句可以正常工作,但是整个语句将不起作用。 其实我收到了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 :(得分:0)

在列名称周围添加引号。当前,您正在尝试将charint类型进行比较。这是不可能的,因为'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;