我在表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
但它甚至不起作用,显示出一个错误