Oracle中日期的使用方法實例
前言
在使用sql函數(shù)時,因項目數(shù)據(jù)庫不同,導(dǎo)致sql中日期的使用方法大不相同, 一些常見的日期計算,都有不同的應(yīng)用,故整理記錄一下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"
-- 添加基礎(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)換成字符串來進行比較.
說明:
- dual是oracle中定義的一個內(nèi)部表,只有一行一列
- SYSDATE函數(shù)表示當(dāng)前時間
- to_char(date,‘format’)函數(shù), 參數(shù)date為日期類型,參數(shù)format表示轉(zhuǎn)換的格式,常用的是'yyyy-mm-dd hh24:mi:ss' (大小寫敏感)
-- 查看兩個時間
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
-- 簡單案例
-- 1 時間比較 因傳入時間小于當(dāng)前時間 結(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 時間比較 因傳入時間小于當(dāng)前時間 結(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 日期差值計算
需求: 計算兩個時間的天數(shù)差
1 直接將兩個時間來相減
兩個日期相減,得到的是精度為時分秒的數(shù)據(jù),不符合要求
SELECT
SYSDATE- to_date('2022-04-10 22:20:02','yyyy-mm-dd hh24:mi:ss')
FROM
dual
-- 結(jié)果 0.0181365740740740740740740740740740740741
2 時間和日期的兩層轉(zhuǎn)換
to_date(string,‘format’)函數(shù),是將字符串轉(zhuǎn)換為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; -- 結(jié)果: 0
此種方法比較繁瑣,且經(jīng)過多次轉(zhuǎn)換,效率較低.
3 使用trunc函數(shù)
trunc()函數(shù).
作用: 用于截取時間或者數(shù)值,返回指定的值.
日期處理:
TRUNC(date,[format])
- date 為必要參數(shù),是輸入的一個date日期值.
- format參數(shù)可忽略,指定日期格式,缺省時表示指定日期的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;
此外,該函數(shù)還可以用于數(shù)值處理.
TRUNC(number,[decimals])
- number 為必要參數(shù),是輸入的一個number數(shù)值.
- decimals 參數(shù)可忽略,指定截取的位數(shù),缺省時表示截掉小數(shù)點后邊的值
SELECT
3.0,
2.22,
trunc(3.0) - trunc(2.22,1)
FROM
dual;
-- 結(jié)果 3 2.22 0.8
總結(jié)
到此這篇關(guān)于Oracle中日期使用的文章就介紹到這了,更多相關(guān)Oracle日期使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle數(shù)據(jù)庫中的LISTAGG函數(shù)使用示例及注意事項
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫中LISTAGG函數(shù)使用示例及注意事項的相關(guān)資料,listagg函數(shù)是Oracle?11.2推出的新特性,其主要功能類似于wmsys.wm_concat函數(shù),即將數(shù)據(jù)分組后把指定列的數(shù)據(jù)再通過指定符號合并,需要的朋友可以參考下2024-08-08
解決ORA-12154 TNS無法解析指定的連接標(biāo)識符問題
Oracle11g server 64bit服務(wù)器端安裝在Windows Server2008 Enterprise上,安裝Oracle11g client 32bit,通過SQL Plus以sysdba身份連接數(shù)據(jù)庫,并且創(chuàng)建表空間、用戶、授權(quán)成功,在連接數(shù)據(jù)庫時出現(xiàn)問題,下面講解ORA-12154無法解析指定的連接標(biāo)識符問題,感興趣的朋友一起看看2024-01-01
處理Oracle監(jiān)聽程序當(dāng)前無法識別連接描述符中請求的服務(wù)異常(ORA-12514)
這篇文章介紹了處理Oracle監(jiān)聽程序當(dāng)前無法識別連接描述符中請求的服務(wù)異常(ORA-12514),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
整理Oracle數(shù)據(jù)庫中數(shù)據(jù)查詢優(yōu)化的一些關(guān)鍵點
這篇文章主要介紹了Oracle數(shù)據(jù)庫中數(shù)據(jù)查詢優(yōu)化的一些關(guān)鍵點的整理,包括多表和大表查詢等情況的四個方面的講解,需要的朋友可以參考下2016-01-01
Oracle?EBS數(shù)據(jù)庫密碼復(fù)雜度設(shè)置圖文教程
選擇安全的密碼并實施良好的密碼策略是迄今為止防止基于密碼的安全威脅的極為重要的防御措施,下面這篇文章主要給大家介紹了關(guān)于Oracle?EBS數(shù)據(jù)庫密碼復(fù)雜度設(shè)置的相關(guān)資料,需要的朋友可以參考下2024-04-04
SQL?錯誤?[1722]?[42000]:?ORA-01722:?無效數(shù)字解決辦法
這篇文章主要給大家介紹了關(guān)于SQL?錯誤?[1722]?[42000]:?ORA-01722:?無效數(shù)字的解決辦法,ORA-01722是一個錯誤代碼,當(dāng)試圖將一個字符串轉(zhuǎn)換為數(shù)字,但字符串無法轉(zhuǎn)換為數(shù)字時會出現(xiàn)這個錯誤,需要的朋友可以參考下2024-06-06
Win7 64環(huán)境下Oracle10g 64位版本安裝教程
這篇文章主要為大家詳細(xì)介紹了Win7 64環(huán)境下Oracle10g 64位版本安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Oracle設(shè)置時區(qū)和系統(tǒng)時間的多種實現(xiàn)方法
在Oracle數(shù)據(jù)庫中,設(shè)置時區(qū)和系統(tǒng)時間可以通過多種方法實現(xiàn),本文通過代碼示例給大家介紹了Oracle設(shè)置時區(qū)和系統(tǒng)時間的多種實現(xiàn)方法,需要的朋友可以參考下2024-02-02

