SELECT months_between(TO_DATE(SYSDATE,'DD-MM-YYYY'),TO_DATE(DATE_COLUMN,'DD-MM-YYYY')) FROM TABLE_A;
1.我收到一条错误消息,其中包含一个非数字字符,其中包含预期的数字'
另外,如何处理空值。如果table_A中的date_column为空,我想设置一个默认日期。
2
SELECT MONTHS_BETWEEN(TO_DATE(SYSDATE,'DD-MM-YYYY'),TO_DATE(DATE_COLUMN,'DD-MM-YYYY')) FROM TABLE_A;
在计算日期之间的月份之后,我想要将具有日期范围的记录与案例陈述进行分类..
例如...... 如果记录集的months_between为22 ..我想为所有这些记录添加一个标记,' 0-24' 类似地,如果months_between是34 ..我想为所有属于这个范围的记录放置一个标记,' 24-48'
答案 0 :(得分:2)
您无需将sysdate
转换为日期。试试这个:
SELECT months_between(trunc(SYSDATE), TO_DATE(DATE_COLUMN,'DD-MM-YYYY'))
问题是Oracle中日期的默认格式使用月份名称。当您说to_date(sysdate, . . .)
时,第一个参数将转换为字符串,然后再转换为日期。
顺便说一句,trunc()
无关紧要,但您似乎想要提取sysdate
的日期部分,因此我将其留下。
编辑:
如果date_column
已经是日期,请使用:
SELECT months_between(trunc(SYSDATE), DATE_COLUMN)
答案 1 :(得分:2)
要添加到上一个答案,您可以避免这样的null:
SELECT months_between(trunc(SYSDATE), nvl(TO_DATE(DATE_COLUMN,'DD-MM-YYYY'), sysdate))
如果您的DATE_COLUMN
是日期类型,则不需要使用TO_DATE()
所以你会得到像这样的东西
SELECT months_between(trunc(SYSDATE), nvl(trunc(DATE_COLUMN), sysdate))
对于你的问题的第二部分你可以尝试这样的事情:
SELECT
trunc(months_between(trunc(SYSDATE), trunc(DATE_COLUMN))),
(trunc(months_between(trunc(SYSDATE), trunc(DATE_COLUMN))/24)*24)||'-'||((trunc(months_between(trunc(SYSDATE), trunc(DATE_COLUMN))/24)*24)+24)
FROM your_table
答案 2 :(得分:0)
如果你在date_column中有空值并希望传递默认日期,那么这是有效的。
select months_between(SYSDATE,coalesce(DATE_COLUMN,to_date('01-01-2014','DD-MM-YYYY'))) DIFF from TABLE_A;