在使用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"));
Oracle中日期的大小比较,通常是转换成字符串来进行比较.
说明:
-- 查看两个时间 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
需求: 计算两个时间的天数差
两个日期相减,得到的是精度为时分秒的数据,不符合要求
SELECT SYSDATE- to_date("2022-04-10 22:20:02","yyyy-mm-dd hh24:mi:ss") FROM dual -- 结果 0.0181365740740740740740740740740740740741
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
此种方法比较繁琐,且经过多次转换,效率较低.
trunc()函数.
作用: 用于截取时间或者数值,返回指定的值.
日期处理:
TRUNC(date,[format])
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])
SELECT 3.0, 2.22, trunc(3.0) - trunc(2.22,1) FROM dual; -- 结果 3 2.22 0.8
到此这篇关于Oracle中日期使用的文章就介绍到这了,更多相关Oracle日期使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!