应该看看你的列的类型不对。如果你的t.time是别的类型,那么需要add_months(to_date....
创新互联建站网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站制作、成都做网站、外贸营销网站建设易于使用并且具有良好的响应性。
如果本身就date类型就外面不用to_date了。
select sysdate+日 from dual
select add_months(sysdate,月) from dual
select add_months(sysdate,12*年) from dual
这个问题在项目中是一个很重要的细节,具体有两种处理方式,主要取决于这个表是否需要进行数据交换,以及这个时间字段如何使用,具体举两个例子吧:
一、使用varchar2型
1、如果这张表对时间的精度要求不高,比如只是到日。
2、该表需要经常与其他表进行数据交互,比较,查询,并且其他表的时间精度不高于日(比如日、月、季度)
3、存储大量数据用于统计分析,如本期、同期,累计值等。
存储的时候需要格式化,例如:to_char(sysdate,'yyyy-mm-dd');
二、使用date型。
1、对时间精度要求较高,比如到秒;
2、需要与其他表做数据交互,更偏重于”准实时“交互,比如每15秒同步一次数据;
3、不用于统计分析(这点很重要,需要统计分析的话,强烈不建议使用date型);
4、该表数据不做物理删除(删除时只更新标志位和删除时间);
以上我这几年的实际项目经验,希望可以帮到你。
select yhm,sum(to_date(out,'yyyy-MM-dd HH24:mi:ss') -to_date(login,'yyyy-MM-dd HH24:mi:ss')) from gyh
group by yhm;
---计算出在线天数。如果login和out仅仅记录时间,不含日期,则自己做个转化即可。
---关于要显示为:日/时/分,为了简单,将sum(....)设定为A,则表达式如下
select yhm,round(A)||'日'||(round(A*24)-round(A)*24)||'时'||round(A*24*60-round(A*24*60)-round(A*24)*60)||'分' from gyh group by yhm;
select sysdate,add_months(sysdate,24) from dual;--系统时间加2年
ps: 24是12个月的倍数,代表两年;三年就是36