SQL Oracle中的日期减法 - 试图通过减去" yyyy / mm / dd"来找到months_between;和" yyyy / mm"

时间:2017-05-23 22:42:44

标签: sql oracle

需要查找SQL oracle表中2个日期之间的差异,作为较大查询的一部分。

问题是,日期#1的格式为" yyyy / mm / dd",日期#2的格式为" yyyy / mm"。出现以下错误:日期格式图片在转换整个输入字符串之前结束。

这是我的问题:

select count(distinct(aqs.quote_ref_id)), substr(aqs.quote_date,1,7), MONTHS_BETWEEN
       (to_date(qp.policy_effective_date, 'yyyy/mm/dd'), to_date(qp.property_exp_date, 'yyyy/mm')) as Num_Months
from live.auto_quote_summary aqs join live.quote_profile qp on qp.quote_ref_id = aqs.quote_ref_id

关于我可能做错的任何想法?

2 个答案:

答案 0 :(得分:0)

错误信息非常清楚。在其中一列中,您必须拥有比您正在使用的格式模型更多的信息。要么policy_effective_date超过年 - 月 - 日(也许是hh24:mi:ss?),要么property_exp_date超过年月。 (不一定在所有行中,但至少在一行中。)

要缩小范围,您可以尝试更简单的查询。如果你select to_date(policy_effective_date, 'yyyy/mm/dd') from live.quote_profile会怎么样?然后尝试与其他日期列相同。找出您的数据不符合您认为的格式。

演示(使用SQL * Plus):

SQL> select to_date('2017/05', 'yyyy/mm') as dt from dual;

DT
----------
2017-05-01

1 row selected.


SQL> select to_date('2017/05/23', 'yyyy/mm') as dt from dual;
select to_date('2017/05/23', 'yyyy/mm') as dt from dual
               *
ERROR at line 1:
ORA-01830: date format picture ends before converting entire input string

答案 1 :(得分:0)

您只需转换所需的第一个“n”字符:

select count(distinct(aqs.quote_ref_id)), substr(aqs.quote_date, 1, 7),
       months_between(to_date(substr(qp.policy_effective_date, 1, 10), 'yyyy/mm/dd'),
                      to_date(substr(qp.property_exp_date, 1, 7), 'yyyy/mm')
                     ) as Num_Months
from live.auto_quote_summary aqs join
     live.quote_profile qp
     on qp.quote_ref_id = aqs.quote_ref_id