sql中计算工作sql时间差函数,休息sql时间差函数sql时间差函数相减小于0怎么处理?


目录
1 日期等于\大于\小于
2 日期差值计算
1 直接将两个时间来相减
2 时间和日期的两层转换
3 使用trunc函数
总结
在使用sql函数时,因项目数据库不同,导致sql中日期的使用方法大不相同, 一些常见的日期计算,都有不同的应用,故整理记录一下Oracle的日期用法。以user表为例
CREATE TABLE "SCOTT"."user"
(
"id" NUMBER(20,0) NOT NULL ENABLE,
"name" VARCHAR2(30),
"age" NUMBER(11,0),
"email" VARCHAR2(50),
"crt_time" DATE,
PRIMARY KEY ("id")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "USERS"
ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "USERS"
-- 添加基础数据
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('1', 'Jone', '18', '''test1@baomidou.com', TO_DATE('2022-04-01 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('2', 'Jone', '20', '''test2@baomidou.com', TO_DATE('2022-04-02 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('3', 'Jone', '28', '''test3@baomidou.com', TO_DATE('2022-04-03 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('4', 'Jone', '21', '''test4@baomidou.com', TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('5', 'Jone', '24', '''test5@baomidou.com', TO_DATE('2022-04-05 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('6', 'Jone', '12', '''test6@baomidou.com', TO_DATE('2022-04-06 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
1 日期等于\大于\小于
Oracle中日期的大小比较,通常是转换成字符串来进行比较.
说明:
dual是oracle中定义的一个内部表,只有一行一列
SYSDATE函数表示当前时间
to_char(date,‘format’)函数, 参数date为日期类型,参数format表示转换的格式,常用的是'yyyy-mm-dd hh24:mi:ss' (大小写敏感)
-- 查看两个时间
select TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') , SYSDATE
FROM dual
-- 结果
-- 2022-04-04 22:20:02
2022-04-10 22:31:43
-- 简单案例
-- 1 时间比较 因传入时间小于当前时间
结果集为空
select TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') , SYSDATE
FROM dual
where
TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') > SYSDATE
--
空串
空串
-- 2 时间比较 因传入时间小于当前时间
结果集有值
select TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') , SYSDATE
FROM dual
where
TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') < SYSDATE
-- 2022-04-04 22:20:02
2022-04-10 22:37:50
2 日期差值计算
需求: 计算两个时间的天数差
1 直接将两个时间来相减
两个日期相减,得到的是精度为时分秒的数据,不符合要求
SELECT
SYSDATE- to_date('2022-04-10 22:20:02','yyyy-mm-dd hh24:mi:ss')
FROM
dual
-- 结果 0.0181365740740740740740740740740740740741
2 时间和日期的两层转换
to_date(string,‘format’)函数,是将字符串转换为date时间.
SELECT
to_date(to_char(SYSDATE,'yyyy-mm-dd'),'YYYY-MM-DD HH24:MI:SS') - to_date(to_char(to_date( '2022-04-10 22:20:02', 'YYYY-MM-DD HH24:MI:SS' ) ,'yyyy-mm-dd'),'YYYY-MM-DD HH24:MI:SS')
FROM
dual;
-- 结果: 0
此种方法比较繁琐,且经过多次转换,效率较低.
3 使用trunc函数
trunc()函数.
作用: 用于截取时间或者数值,返回指定的值.
日期处理:
TRUNC(date,[format])
date 为必要参数,是输入的一个date日期值.
format参数可忽略,指定日期格式,缺省时表示指定日期的0点.
SELECT
SYSDATE,
to_date( '2022-04-10 22:20:02', 'YYYY-MM-DD HH24:MI:SS' ),
trunc(SYSDATE) - trunc(to_date( '2022-04-10 22:20:02', 'YYYY-MM-DD HH24:MI:SS' ))
FROM
dual;
此外,该函数还可以用于数值处理.
TRUNC(number,[decimals])
number 为必要参数,是输入的一个number数值.
decimals 参数可忽略,指定截取的位数,缺省时表示截掉小数点后边的值
SELECT
3.0,
2.22,
trunc(3.0) - trunc(2.22,1)
FROM
dual;
-- 结果 3
2.22
0.8
总结
到此这篇关于Oracle中日期使用的文章就介绍到这了,更多相关Oracle日期使用内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
美国服务器租用
版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。
上一篇:
下一篇:
}

我要回帖

更多关于 sql时间差函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信