上了小半年的班了,做的东西差不多都忘了,以后应该经常总结一下,方便自己以后查寻。今天先总结一下我在写存储过程中遇到的时间日期的问题:
1. date型的值与number型的值做运算,结果是date型,单位是天。
2. select to_char(sysdate,'yyyy') from dual; --年
select to_char(sysdate,'Q' from dual; --季
select to_char(sysdate,'mm') from dual; --月
select to_char(sysdate,'dd') from dual; --日
select to_char(sysdate,'ddd') from dual; --年中的第几天
select to_char(sysdate,'ww') from dual; --年中的第几周
select to_char(sysdate,'dd') from dual; --该月中的第几周
select to_char(sysdate,'d') from dual; --该周中的第几天(周日是第一天)
select (mod(to_number(to_char(sysdate,'d'))+6,8) + round((to_number(to_char(sysdate,'d'))+6)/8))from dual; --该周中的第几天(周一是第一天)
select to_char(sysdate,'day') from dual; --星期几
select to_char(sysdate,'hh') from dual; --小时12
select to_char(sysdate,'hh24') from dual; --小时24
select to_char(sysdate,'mi') from dual; --分
select to_char(sysdate,'ss') from dual; --秒
3. oracle 中的数据转换问题:
to_number(字符型),
to_date(字符型,'yyyy/mm/dd'), 或是其他的date_fomat.如yyyy-mm-dd hh24:mi:ss
to_char(数字型),
to_char(日期型,'yyyymmddhh24miss')
4. 如果用number型的值来代表时间(如231234代表23:12:34, 3456代表00:34:56)
当0点几分几秒时在把number转换成date时,就会出问题,
我的解决办法:将此时间+1000000,然后取第2到第7位,再转换成date型就不会出错了。测试如下
select to_char(to_date(substr(1000000 + 时间的NUMBER型 值,2,7),' hh24miss'), 'hh24miss') from dual;