zoukankan      html  css  js  c++  java
  • Oracle SQL日期及日期格式获取命令

    日期及日期格式:

    获取系统日期:

    sysdate()  

    格式化日期

    to_char(sysdate(),'yyyy-mm-dd,hh24:mi:ss')
    to_date(sysdate(),'yyyy-mm-dd,hh24:mi:ss')

    注:

    to_char 把日期或数字转换为字符串

    to_char(number, '格式')
    to_char(salary, '$99,999.99')
    to_char(date, '格式')

    to_date 把字符串转换为数据库中的日期类型

    to_date(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

    例子:

    返回系统日期: 2018/1/19 22:44:54

    select sysdate from dual;

    格式化: 2018-01-19 22:46:59

    select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual 

    获取昨天:2018/1/18

    select trunc(sysdate-1) from dual;

    获取上个月第一天:2017/12/1

    select add_months(trunc(sysdate,'MON'),-1) from dual
     
    select add_months(trunc(sysdate,'MON'),-13) from dual

    获得本季度第一天:2018/1/1

    select trunc(add_months(sysdate,0),'Q') from dual

    获得上季度第一天:2017/10/1

    select trunc(add_months(sysdate,-3),'Q') from dual

    补充

    当前时间减去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;
    Oracle 常用的时间函数
    Sysdate : 当前日期和时间
    SQL> Select sysdate from dual;
    2018/1/19 23:15:20
    Last_day : 本月最后一天
    SQL> Select last_day(sysdate) from dual;
    2018/1/31 23:16:24
    Add_months(d,n) : 当前日期d后推n个月,用于从一个日期值增加或减少一些月份
    SQL> Select add_months(sysdate,2) from dual;
    2018/3/19 23:18:29
    Months_between(f,s) : 日期f和s间相差月数
    SQL> select months_between(sysdate,to_date('2017-8-1','yyyy-mm-dd'))from dual;
    5.6120034348865
    NEXTDAY(d, dayofweek) : 返回由"dayofweek"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"dayof_week"必须为该星期中的某一天。
    SQL> SELECT next_day(to_date('2017-08-20','YYYY-MM-DD'),1) FROM dual;
    2017/8/27
     

    常用日期数据格式(该段为摘抄)

    Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年

    SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前1112年

    Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度

    MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月

    RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月

    Month 用9个字符长度表示的月份名 Select to_char(sysdate,’Month’) from dual; May后跟6个空格表示5月

    WW 当年第几周 Select to_char(sysdate,’WW’) from dual; 24表示2002年6月13日为第24周

    W 本月第几周 Select to_char(sysdate,’W’) from dual; 2002年10月1日为第1周

    DDD 当年第几, 1月1日为001,2月1日为032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2月2 9日为第363天

    DD 当月第几天 Select to_char(sysdate,’DD’) from dual; 04 10月4日为第4天

    D 周内第几天 Select to_char(sysdate,’D’) from dual; 5 2002年3月14日为星期一

    DY 周内第几天缩写 Select to_char(sysdate,’DY’) from dual; SUN 2002年3月24日为星期天

    HH或HH12 12进制小时数 Select to_char(sysdate,’HH’) from dual; 02 午夜2点过8分为02

    HH24 24小时制 Select to_char(sysdate,’HH24’) from dual; 14 下午2点08分为14

    MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4点17分

    SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual; 22 11点3分22秒

    提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

    现在给出一些实践后的用法:

     
    1。上月末天:
    
    select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;
    2017-12-31
    2。上月今天
    
    select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;
    2017-12-19
    3.上月首天
    
    select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
    2017-12-01
    4.按照每周进行统计
    
    SQL> select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');
    03
    5。按照每月进行统计
    
    select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');
    01
    6。按照每季度进行统计
    
    select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');
    1
    7。按照每年进行统计
    
    select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');
    2018
    8.要找到某月中所有周五的具体日期
    
    select trunc(sysdate, 'MM')+rownum-1 as d from dba_objects where rownum < 32) t
    where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期
    and trim(to_char(t.d, 'Day')) = '星期五' ;
    18-01-05
    18-01-12
    18-01-19
    18-01-26
    如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。
     
  • 相关阅读:
    在线编辑器 复制word里面带图文的文章,图片可以直接显示
    php 支持 超大上G,多附件上传
    jsp 支持 超大上G,多附件上传
    java 支持 超大上G,多附件上传
    网页实现大文件上传下载
    HTML5实现大文件上传下载
    百度WebUploader实现大文件上传下载
    WebUploader实现大文件上传下载
    BZOJ 2064: 分裂 状压动归
    [POI2005]AUT-The Bus 树状数组维护最大前缀和
  • 原文地址:https://www.cnblogs.com/liuys635/p/12346008.html
Copyright © 2011-2022 走看看