zoukankan      html  css  js  c++  java
  • Oracle- 日期格式和数字类型处理

      更新数据库时间格式的显示格式的语句:(alter session set nls_date_format='YYYY-MM-dd');

      to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错。即按照第二个参数的格式解释第一个参数。
      to_char(日期,"转换格式" ) 即把给定的日期按照“转换格式”转换。
      to_char转换的格式:

      表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位数表示年
      表示month的:mm 用2位数字表示月;mon 用简写形式 比如11月或者nov ;month 用全称 比如11月或者november
      表示day的:dd 表示当月第几天;ddd表示当年第几天;dy 当周第几天 简写 比如星期五或者fri;day当周第几天 全写比如星期五或者friday。
      表示hour的:hh 2位数表示小时 12进制; hh24 2位数表示小时 24小时
      表示minute的:mi 2位数表示分钟
      表示second的:ss 2位数表示秒 60进制
      表示季度的:q 一位数 表示季度 (1-4)

      另外还有ww 用来表示当年第几周 w用来表示当月第几周。
      24小时制下的时间范围:00:00:00-23:59:59
      12小时制下的时间范围:1:00:00-12:59:59

      

      比如:

      select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual //显示:08-11-07 13:22:42
      select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual //显示:2005-12-25 13:25:59
      而如果把上式写作:select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual,则会报错,因为小时hh是12进制,13为非法输入,不能匹配。

      补充:

      当前时间减去7分钟的时间 :select sysdate,sysdate - interval '7' MINUTE from dual
      当前时间减去7小时的时间 :select sysdate - interval '7' hour from dual
      当前时间减去7天的时间 :select sysdate - interval ’7’ day from dual
      当前时间减去7月的时间 :select sysdate,sysdate - interval '7' month from dual
      当前时间减去7年的时间 :select sysdate,sysdate - interval '7' year from dual
      时间间隔乘以一个数字 :select sysdate,sysdate - 8*interval '7' hour from dual

      Dual伪列 含义解释:Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。

      1. 日期和字符转换函数用法(to_date,to_char)

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串 
    select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年 
    select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月 
    select to_char(sysdate,'dd') as nowDay from dual; //获取时间的日 
    select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时 
    select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分 
    select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒
    select to_char(sysdate,'cc') as 世纪 from dual; //获得世纪,例如现在是21世纪
    select to_char(sysdate,'q') as 季度 from dual; //获得季度 select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//

      2.求某天是星期几 

    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; 
    星期一 
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; 
    monday 
    设置日期语言 
    ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; 
    也可以这样 
    TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

      3. 两个日期间的天数 

    select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

      4. 日期格式冲突问题

      输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01' 
      alter system set NLS_DATE_LANGUAGE = American 
      alter session set NLS_DATE_LANGUAGE = American 
      或者在to_date中写 
      select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; 
      注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多, 
      可查看 
      select * from nls_session_parameters 
      select * from V$NLS_PARAMETERS

      5. 查找2002-02-28至2002-02-01间除星期一和七的天数 

    select * from table where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )  not in ( '1', '7' ) 

      6.找出月份的最后一天

    select last_day(sysdate) from dual

      7.找出今年的天数 

    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

      8,round[舍入到最接近的日期](day:舍入到最接近的星期日)

    select sysdate S1,
    round(sysdate) S2 ,
    round(sysdate,'year') YEAR,
    round(sysdate,'month') MONTH ,
    round(sysdate,'day') DAY from dual

      9,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型

    select sysdate S1, 
    trunc(sysdate) S2, //返回当前日期,无时分秒
    trunc(sysdate,'year') YEAR, //返回当前年的1月1日,无时分秒
    trunc(sysdate,'month') MONTH , //返回当前月的1日,无时分秒
    trunc(sysdate,'day') DAY //返回当前星期的星期天,无时分秒
    from dual

      10,返回日期列表中最晚日期

    select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

      11.计算时间差

    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //时间差-select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //时间差-select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //时间差-select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //时间差-select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //时间差-select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-

      12.更新时间

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual //改变时间-select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-

      13.查找月的第一天,最后一天

    SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
    Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
    Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
    LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
    FROM dual;

    转截自:http://hi.baidu.com/gzfvb/blog/item/5062b7f008eb70a8a50f5206.html

  • 相关阅读:
    查看Linux内核版本命令
    身份证测试用
    aaa
    aaaaaaaaaaaaaaa
    https
    httpclient调用https
    共阴极数码管编码
    时间单位换算
    Java 中System里getProperty(something)
    VM arguments
  • 原文地址:https://www.cnblogs.com/cxeye/p/4018406.html
Copyright © 2011-2022 走看看