網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
在使用sql函數(shù)時(shí),因項(xiàng)目數(shù)據(jù)庫(kù)不同,導(dǎo)致sql中日期的使用方法大不相同, 一些常見(jiàn)的日期計(jì)算,都有不同的應(yīng)用,故整理記錄一下Oracle的日期用法。
以u(píng)ser表為例
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"
-- 添加基礎(chǔ)數(shù)據(jù)
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中日期的大小比較,通常是轉(zhuǎn)換成字符串來(lái)進(jìn)行比較.
說(shuō)明:
- dual是oracle中定義的一個(gè)內(nèi)部表,只有一行一列
- SYSDATE函數(shù)表示當(dāng)前時(shí)間
- to_char(date,‘format’)函數(shù), 參數(shù)date為日期類(lèi)型,參數(shù)format表示轉(zhuǎn)換的格式,常用的是'yyyy-mm-dd hh24:mi:ss' (大小寫(xiě)敏感)
-- 查看兩個(gè)時(shí)間
select TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') , SYSDATE
FROM dual
-- 結(jié)果
-- 2022-04-04 22:20:02 2022-04-10 22:31:43
-- 簡(jiǎn)單案例
-- 1 時(shí)間比較 因傳入時(shí)間小于當(dāng)前時(shí)間 結(jié)果集為空
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 時(shí)間比較 因傳入時(shí)間小于當(dāng)前時(shí)間 結(jié)果集有值
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 日期差值計(jì)算
需求: 計(jì)算兩個(gè)時(shí)間的天數(shù)差
1 直接將兩個(gè)時(shí)間來(lái)相減
兩個(gè)日期相減,得到的是精度為時(shí)分秒的數(shù)據(jù),不符合要求
SELECT
SYSDATE- to_date('2022-04-10 22:20:02','yyyy-mm-dd hh24:mi:ss')
FROM
dual
-- 結(jié)果 0.0181365740740740740740740740740740740741
2 時(shí)間和日期的兩層轉(zhuǎn)換
to_date(string,‘format’)函數(shù),是將字符串轉(zhuǎn)換為date時(shí)間.
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;
-- 結(jié)果: 0
此種方法比較繁瑣,且經(jīng)過(guò)多次轉(zhuǎn)換,效率較低.
3 使用trunc函數(shù)
trunc()函數(shù).
作用: 用于截取時(shí)間或者數(shù)值,返回指定的值.
日期處理:
TRUNC(date,[format])
- date 為必要參數(shù),是輸入的一個(gè)date日期值.
- format參數(shù)可忽略,指定日期格式,缺省時(shí)表示指定日期的0點(diǎn).
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;
此外,該函數(shù)還可以用于數(shù)值處理.
TRUNC(number,[decimals])
- number 為必要參數(shù),是輸入的一個(gè)number數(shù)值.
- decimals 參數(shù)可忽略,指定截取的位數(shù),缺省時(shí)表示截掉小數(shù)點(diǎn)后邊的值
SELECT
3.0,
2.22,
trunc(3.0) - trunc(2.22,1)
FROM
dual;
-- 結(jié)果 3 2.22 0.8
總結(jié)
原文鏈接:https://blog.csdn.net/ABestRookie/article/details/124088172
相關(guān)推薦
- 2023-06-18 Redis優(yōu)雅地實(shí)現(xiàn)延遲隊(duì)列的方法分享_Redis
- 2022-04-25 C++特殊成員函數(shù)以及其生成機(jī)制詳解_C 語(yǔ)言
- 2022-07-09 kubernetes之證書(shū)更新
- 2023-07-26 webpack原理之開(kāi)發(fā)第一個(gè)loader
- 2023-03-29 Python之二維正態(tài)分布采樣置信橢圓繪制_python
- 2022-10-14 wget -c 斷點(diǎn)續(xù)傳命令
- 2022-10-20 react實(shí)現(xiàn)動(dòng)態(tài)表單_React
- 2021-12-18 C++?STL容器詳解之紅黑樹(shù)部分模擬實(shí)現(xiàn)_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支