我在表my_table中有一个接受数值的字段c_days从1到31。在此字段中,从1到9的数字是个位数。
我正在写一个条件,如果c_day大于今天,那么您需要以to_date日期格式显示c_day,如果小于,则以日期格式显示c_day,仅在下一个月。
例如,c_day是14,而今天我们有第8个数字,因此您需要显示日期14.02.2023,如果c_day等于5,则需要显示下一个月的日期05.03.2023
我做了这样的事情:
SELECT
C_DAY,
CASE
WHEN C_DAY >= TO_CHAR(SYSDATE, 'DD') THEN
TO_DATE(C_DAY || '.' || TO_CHAR(SYSDATE, 'MM') || '.' || TO_CHAR(SYSDATE, 'YYYY'), 'dd.mm.yyyy')
WHEN C_DAY < TO_CHAR(SYSDATE, 'DD') THEN
TO_DATE(C_DAY || '.' || TO_CHAR(SYSDATE, 'MM') || '.' || TO_CHAR(SYSDATE, 'YYYY'), 'dd.mm.yyyy')
WHEN C_DAY IS NULL THEN
null
END AS new_field
FROM my_table
问题是最终结果没有转换为日期格式,我认为这是日期可以显示为1.03.2023、7.03.2023的原因,所以我尝试将其转换为
TO_CHAR(C_DAY, 'fm00')
并做到了这一点:
SELECT
C_DAY,
CASE
WHEN TO_CHAR(C_DAY, 'fm00') >= TO_CHAR(SYSDATE, 'DD') THEN
TO_DATE(TO_CHAR(C_DAY, 'fm00') || '.' || TO_CHAR(SYSDATE, 'MM') || '.' || TO_CHAR(SYSDATE, 'YYYY'), 'dd.mm.yyyy')
WHEN TO_CHAR(C_DAY, 'fm00') < TO_CHAR(SYSDATE, 'DD') THEN
TO_DATE(TO_CHAR(C_DAY, 'fm00') || '.' || TO_CHAR(SYSDATE, 'MM') || '.' || TO_CHAR(SYSDATE, 'YYYY'), 'dd.mm.yyyy')
WHEN C_DAY IS NULL THEN
null
END AS new_field
FROM my_table
但它甚至不起作用,显示出一个错误