SQL语句——04、日期类型函数

如果你对当前系统的日期格式看这不舒服,可以修改当前会话的显示格式

idle> alter session set NLS_DATE_FORMAT=‘YYYY-MM-DD HH24:MI:SS‘;

Session altered.

idle> select sysdate from dual;

SYSDATE
-------------------
2010-12-17 08:52:31

这是OS系统时间,数据库本身没时间 只有SCN号

日期可以直接参与运算

idle> select sysdate-10 from dual;

SYSDATE-10
-------------------
2010-12-07 08:53:16

两个日期型数据相减会得到相差的天数

idle> select to_date(‘2010-12-30‘)-sysdate from dual;

TO_DATE(‘2010-12-30‘)-SYSDATE
-----------------------------
     12.6290856

idle>

可以将日期型的数据和一个小时数相加减 这个数要除以24

idle> select sysdate from dual;

SYSDATE
-------------------
2010-12-17 08:55:56

idle> select sysdate + 5/24 from dual;

SYSDATE+5/24
-------------------
2010-12-17 13:55:56

idle>

MONTHS_BEWTEEN(日期1,日期2)

如果日期1大于日期2返回正数,日期1小于日期2返回负数

idle> select months_between(‘2010-10-10‘,‘2010-12-10‘) from dual;

MONTHS_BETWEEN(‘2010-10-10‘,‘2010-12-10‘)
-----------------------------------------
           -2

idle> select months_between(‘2010-12-10‘,‘2010-10-10‘) from dual;

MONTHS_BETWEEN(‘2010-12-10‘,‘2010-10-10‘)
-----------------------------------------
     2

idle>

ADD_MONTHS(日期,n)

把n个月加到日期上

idle> select add_months(‘2010-10-10‘,3) from dual;

ADD_MONTHS(‘2010-10
-------------------
2011-01-10 00:00:00

NEXT_DAY(日期,星期)

下一个星期几的日期? 如果是中文系统将MONDAY改成"星期一"

idle> select next_day(sysdate,‘MONDAY‘) from dual;

NEXT_DAY(SYSDATE,‘M
-------------------
2010-12-20 09:02:06

idle>
idle> select next_day(sysdate,‘fri‘) from dual;

NEXT_DAY(SYSDATE,‘F
-------------------
2010-12-24 09:02:44

idle>

LAST_DAY(日期)

返回该日期的所在月的最后一天

idle> select last_day(sysdate) from dual;

LAST_DAY(SYSDATE)
-------------------
2010-12-31 09:03:26

idle>

idle> alter session set nls_date_format=‘YYYY-MM-DD‘;

Session altered.
idle> select ename,hiredate,last_day(hiredate),next_day(hiredate,‘SUN‘),months_between(sysdate,hiredate) "MON",ADD_MONTHS(hiredate,3) from emp
where ename=‘SCOTT‘;

ENAME   HIREDATE   LAST_DAY(H NEXT_DAY(H   MON ADD_MONTHS
---------- ---------- ---------- ---------- ---------- ----------
SCOTT   1987-04-19 1987-04-30 1987-04-26 283.947709 1987-07-19

idle>

ROUND(date,‘[day|month|year]‘) 和 trunc(date,‘[day|month|year]‘)

应用于日期型数据,数字的进位和截取是以小数点为中心,而日期的进位和截取是以年月日时分秒为中心

idle> select round(‘2010-10-10‘,‘MONTH‘) from dual;
select round(‘2010-10-10‘,‘MONTH‘) from dual
             *
ERROR at line 1:
ORA-01722: invalid number
因为round不能处理字符型数据,所以报错,我们要将字符型数据转换为日期型

idle> select round(to_date(‘2010-10-10‘),‘MONTH‘) from dual;

ROUND(TO_DATE(
-------------------
2010-10-01 00:00:00

这是按月为单位进行四舍五入 因为10号是16号以前 所以得到10.1日
月为单位的四舍五入的分割线
idle>  select round(to_date(‘2010-10-15‘),‘MONTH‘),trunc(to_date(‘2010-10-15‘)) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2010-10-01 00:00:00 2010-10-15 00:00:00

idle>  select round(to_date(‘2010-10-16‘),‘MONTH‘),trunc(to_date(‘2010-10-16‘)) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2010-11-01 00:00:00 2010-10-16 00:00:00

idle>

年为单位的四舍五入分割线
idle> select round(to_date(‘2010-06-30‘),‘year‘),trunc(to_date(‘2010-06-30‘),‘year‘) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2010-01-01 00:00:00 2010-01-01 00:00:00

idle>  select round(to_date(‘2010-07-01‘),‘year‘),trunc(to_date(‘2010-07-01‘),‘year‘) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2011-01-01 00:00:00 2010-01-01 00:00:00

idle>

RR与 YY的区别

SQL> select to_date(‘18-may-91‘,‘DD-MON-RR‘) FROM DUAL;

TO_DATE(‘18-MAY-91‘
-------------------
1991-05-18 00:00:00

SQL> select to_date(‘18-may-91‘,‘DD-MON-YY‘) FROM DUAL;

TO_DATE(‘18-MAY-91‘
-------------------
2091-05-18 00:00:00

SQL> 

原文地址:https://www.cnblogs.com/marxist/p/11708150.html

时间: 2024-10-11 03:31:46

SQL语句——04、日期类型函数的相关文章

sql语句 关于日期时间、类型转换的东西

(一) 1, select update_date, CONVERT(VARCHAR(30),update_date,111) jj ,CONVERT(VARCHAR(30),update_date,8) aa from report_month   //update_date为datetime型,结果显示为: update_date                                     jj                          aa 2007-01-06 16:

使用sql语句查询日期在一定时间内的数据

使用sql语句查询日期在一周内的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0   //查询当天日期在一周年的数据 select * from ShopOrder where datediff(day,ordTime,getdate()-1)=0   //查询当天的所有数据 SELECT * FROM A where datediff(d,datetime,getdate()) <=30 //前30天 S

对SQL语句进行过滤的函数

/// <summary> /// 过滤SQL非法字符串 /// </summary> /// <param name="value"></param> /// <returns></returns> public static string Filter(string value) { if (string.IsNullOrEmpty(value)) return string.Empty; value = Re

ORACLE基本SQL语句-添加更新数据函数篇

一.添加数据 /*添加数据*/insert into STU values('stu0004','赵一',18,1,"kc0004");insert into STU(STU_ID,STU_NAME,STU_AGE,STU_SET ) values('stu0013','储十一',19,1); 说明:如果不指定将数据添加到那个字段,那么此时必须列出全部数据,如果列出字段,则一一对应,必须列出约束不为空的所有字段,否则报错. 二.更新数据 /*更新数据*/update STU SET S

spark sql 怎样处理日期类型

spark sql 怎样处理日期类型.时间类型 json 每个对象 不能换行 ##问题描述 json File 日期类型 怎样处理?怎样从字符型,转换为Date或DateTime类型? json文件如下,有字符格式的日期类型 ``` { "name" : "Andy", "age" : 30, "time" :"2015-03-03T08:25:55.769Z"} { "name" :

Oracle 时间,日期 类型函数及参数详解

ORACLE字符数字日期之间转化 Java代码 24 小时的形式显示出来要用 HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; to_date() function 1. 日期格式参数 含义说明 D 一周中的星期几 DAY 天的名字,使用空格填充到 9 个字符 DD 月中的第

在PL/SQL中使用日期类型

之前的文章介绍了在PL/SQL中使用字符串和数字了下.毫无疑问,字符串和数字很重要,但是可以确定的是没有哪个应用不依赖于日期的. 你需要记录事件的发生事件,人们的出生日期等等很多. 通常的使用方式是: 1)声明日期变量和常量 2)使用内建函数显示和修改日期值 3)执行日期相关计算 日期类型比字符串或数字更复杂.它有多个部分组成(年,月,日,时,分,秒等),而且关于一个有效的日期有很多规则. 本文将给你所有信息以便在PL/SQL程序中使用日期. 1.PL/SQL中的日期,时间戳和间隔(Interv

【Mysql】求出离最近相差X天的项,sql语句关于日期的比对

对于一张如下的testtable表,如果要查询date离现在相差的30年的日期 则应该使用如下的sql语句: select * from testtable where timestampdiff(year,date,now())<30 这种方法,即使date这个字段是varchar类型也是可以查询成功的. timestampdiff函数中,第一个字段是单位,可以改成second,day,month等 而如下的查询方法,考虑到1985离现在相差30年,虽然简单,但是如果日期的变更,比如明年,这条

SQL笔记 GETDATE()日期格式化函数

Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE(), 1): 05/16/06Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06Select

使用SQL语句查询日期(当月天数,当月第一天,当月最后一天,本年最后一天,当月第一个星期) 日期转字符串

取某月天数:select day(dateadd(month,1,'2012-02-01')-1) --当月天数 select day(dateadd(ms,-3,DATEADD(m, DATEDIFF(m,0,getdate())+1,0))) ---当月第一天 select dateadd(d,-day(getdate())+1,getdate()) ---当月最后一天 select dateadd(d,-1,dateadd(m,1,dateadd(d,-day(getdate())+1,g