一、date
1.date、sysdate格式說明
展示
date類型,展示格式既可以為:YYYY/MM/DD,也可以為YYYY/MM/DD HH24:MI:SS;
其存儲格式只有一種:YYYY/MM/DD HH24:MI:SS
展示格式一:
當你只存年月日時,date實際存儲的是:年月日0時0分0秒,在plsql中,其展示格式為:YYYY/MM/DD,
將其轉換成YYYY/MM/DD HH24:MI:SS時,返回的是YYYY/MM/DD 00:00:00。
展示格式二:
當date實際存儲的是年月日時分秒時,在plsql中,其展示格式為:YYYY/MM/DD HH24:MI:SS;
系統時間sysdate,在plsql中,其展示格式為:YYYY/MM/DD?HH24:MI:SS。
說明:與插入時的格式無關
證實
TESTDATE表結構
插入sql的日期格式及結果展示
補充:
當插入年月日時分秒且時分秒為:00:00:00,在plsql中是不顯示時分秒的。
要想顯示出來,需用to_char()
若是還是對推薦有疑問,請看下面的 4.2 查詢指定時間段的數據
2.日期轉字符串
TO_CHAR(date,format)
方式一:只帶一個參數
select to_char(t.schedule_date) from CONSULT_SCHEDULE t
--28-APR-17
方式二:帶2個參數
轉換格式不區分大小寫;
小時格式化:不帶24時,默認為12小時制,24小時格式轉換時需要指明;
分鐘格式化:可以使用mi或mm,建議使用MI。
說明:
格式化成yyyy年mm月dd日
--年月日
--需要填充3個空格,不然‘日’顯示不出來
SELECT TO_CHAR(SYSDATE,'yyyy"年"MM"月"dd"日" ') 系統日期 FROM DUAL
注意:
年月日需加上雙引號;
別名不能加單引號、雙引號。
3.字符串轉日期
方法一:
TO_DATE('dateStr', format),規則如下:
轉換格式不區分大小寫;
小時格式化:不帶24時,默認為12小時制,24小時格式轉換時需要指明;
分鐘格式化:必須使用mi,不能使用mm,否則會報錯;
dateStr的長度<=format的長度,都可以實現類型轉換:
方式一:標準格式
年月日
說明:
年月日時分秒
方式二:字符串只到分,會自動添加上:00秒。
方式三:字符串也是只到日
方法二:
DATE'YYYY-MM-DD',并且只能是這一種格式。
另外,TO_DATE(date),該函數也可以只傳一個參數,但是這個參數必須是date類型,
表示的含義是:將任何格式的日期類均轉換成YYYY/MM/DD的格式。
4.根據日期查詢數據
說明:這里著重介紹的是日期字段帶有時分秒的
4.1 查詢某一天的數據
測試環境:
VIRTUAL_CARD表中共有5條記錄;
字段REGTIME的字段類型為date。
情景模擬:查詢2018年7月18日的數據記錄
格式要求:日期轉變成YYYY-MM-DD HH24:MI:SS格式的字符串
方式一:查詢條件使用字符串實現
--查詢條件按字符串進行
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TO_CHAR(T.REGTIME, 'yyyy-mm-dd') = '2018-07-18'
方式二:查詢條件使用日期實現
方法一:TRUNC()
--查詢條件按日期進行1
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TRUNC(T.REGTIME) = TO_DATE('2018-07-18', 'YYYY-MM-DD')
方法二:TO_DATE()
--查詢條件按日期進行2
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TO_DATE(T.REGTIME) = TO_DATE('2018-07-18', 'YYYY-MM-DD')
方式三:利用TO_DATE()特性
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE T.REGTIME >= TO_DATE('2018-07-18', 'YYYY-MM-DD')
AND T.REGTIME < TO_DATE('2018-07-19', 'YYYY-MM-DD')
方法四:TO_CHAR()-->TO_DATE() 不建議使用
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TO_DATE(TO_CHAR(T.REGTIME, 'YYYY-MM-DD'), 'YYYY-MM-DD') =
TO_DATE('2018-07-18', 'YYYY-MM-DD')
查詢結果展示
updateTime--2018年8月15日10點21分
4.2 查詢指定時間段的數據
表數據展示
場景:查詢從2018-08-05至2018-08-06的數據
錯誤實現方式:
--錯誤實現:between and
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME BETWEEN TO_DATE('2018-08-05', 'yyyy-mm-dd') AND
TO_DATE('2018-08-07', 'yyyy-mm-dd')
ORDER BY REGTIME
查詢結果:[2018/08/05 00:00:00,2018/08/07 00:00:00]
方式一:
--方式一:[2018/08/05 00:00:00,2018/08/06 23:59:59]
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME >= TO_DATE('2018-08-05', 'yyyy-mm-dd') AND
REGTIME < TO_DATE('2018-08-07', 'yyyy-mm-dd')
ORDER BY REGTIME
方式二:推薦使用
--方式二:[2018/08/05 00:00:00,2018/08/07 00:00:00)
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME >= TO_DATE('2018-08-05', 'yyyy-mm-dd') AND
REGTIME < TO_DATE('2018-08-06', 'yyyy-mm-dd') + 1 --2018-08-07
ORDER BY REGTIME
方式三:
--方式三
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME >= TO_DATE('2018-08-05 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND
REGTIME <= TO_DATE('2018-08-06 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
ORDER BY REGTIME
5.date類型進行加減運算
二、timestamp
1.格式
--查詢系統時間戳
SELECT SYSTIMESTAMP FROM DUAL
三、相互轉換
1.日期轉時間戳
--系統時間轉時間戳
SELECT CAST(SYSDATE AS TIMESTAMP) DATE_TO_TIMESTAMP FROM DUAL
寫在最后
哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!