用 to_char 和 to_number 减去两年
subtracting two years with to_char and to_number
我需要减去两个日期。首先,我使用 to_char 将日期字段转换为年份,然后使用 to_number 转换为数字。但是我在减去两年时在查询中遇到错误:
to_char((order date),'yyyy')
to_char((beginning of the year),'yyyy')
我尝试使用
转换为数字
to_number(to_char((order date),'yyyy'),'9999')
to_number(to_char((beginning of the year),'yyyy'),'9999')
您可以使用EXTRACT
函数:
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM order_date)
或者,如果你想得到实际的差异并衡量整年(占月而不仅仅是年),那么你可以使用 MONTHS_BETWEEN
除以 12 并向下取整:
FLOOR(MONTHS_BETWEEN(TRUNC(SYSDATE, 'YYYY'), order_date) / 12)
使用extract
;它比你正在做的更简单:
select extract(year from order_date) - extract(year from trunc(sysdate, 'yyyy')) as result
from some_table
我需要减去两个日期。首先,我使用 to_char 将日期字段转换为年份,然后使用 to_number 转换为数字。但是我在减去两年时在查询中遇到错误:
to_char((order date),'yyyy')
to_char((beginning of the year),'yyyy')
我尝试使用
转换为数字to_number(to_char((order date),'yyyy'),'9999')
to_number(to_char((beginning of the year),'yyyy'),'9999')
您可以使用EXTRACT
函数:
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM order_date)
或者,如果你想得到实际的差异并衡量整年(占月而不仅仅是年),那么你可以使用 MONTHS_BETWEEN
除以 12 并向下取整:
FLOOR(MONTHS_BETWEEN(TRUNC(SYSDATE, 'YYYY'), order_date) / 12)
使用extract
;它比你正在做的更简单:
select extract(year from order_date) - extract(year from trunc(sysdate, 'yyyy')) as result
from some_table