将 NVL 与 TO_DATE 和 TO_CHAR 函数一起使用会导致 ORA-01843 错误

问题描述 投票:0回答:1

我有以下查询,当我添加

NVL
函数时,出现错误

ORA-01843:不是有效的月份

如果参数

SYSDATE
:Transaction_DateTO
,我只想使用结束日期范围作为当前日期 (
NULL
)。

SELECT *
FROM MyTable TXN
WHERE 
    TXN.TRANSACTION_DATE BETWEEN
       to_date(to_char(:Transaction_DateFROM,'YYYY-MM-DD') || ' 00:00:00', 'YYYY-MM-DD HH24:Mi:SS')  
       AND 
       NVL(to_date(to_char(:Transaction_DateTO,'YYYY-MM-DD') || ' 23:59:59', 'YYYY-MM-DD HH24:Mi:SS'), SYSDATE)  
sql oracle
1个回答
0
投票

如果您将日期作为绑定变量传递,则不要在其上使用

TO_CHAR
TO_DATE
,只需使用
TRUNC
(并添加一天并使用非包含上限)。

SELECT *
FROM   MyTable TXN
WHERE  TXN.TRANSACTION_DATE >= TRUNC(:Transaction_DateFROM)
AND    TXN.TRANSACTION_DATE <  TRUNC(COALESCE(:Transaction_DateTO, SYSDATE)) + 1
© www.soinside.com 2019 - 2024. All rights reserved.