SQL 中的昨天、今天和明天
作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫管理與開發(fā)經(jīng)驗(yàn),目前在一家全球性的金融公司從事數(shù)據(jù)庫架構(gòu)設(shè)計(jì)。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目錄
獲取今天的日期
獲取昨天的日期
獲取明天的日期
總結(jié)
大家好,我是只談技術(shù)不剪發(fā)的 Tony 老師。
SQL 標(biāo)準(zhǔn)為我們定義了很多內(nèi)置的處理函數(shù),極大地方便了信息的獲取和數(shù)據(jù)的處理。今天給大家介紹一下獲取系統(tǒng)日期的內(nèi)置函數(shù),以及不同數(shù)據(jù)庫中的擴(kuò)展實(shí)現(xiàn),包括:MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite 數(shù)據(jù)庫。
如果覺得文章對(duì)你有用,歡迎評(píng)論??、點(diǎn)贊??、推薦??
獲取今天的日期
SQL 標(biāo)準(zhǔn)定義了 CURRENT_DATE 函數(shù),用于獲取數(shù)據(jù)庫系統(tǒng)的當(dāng)前日期。例如:
– MySQL、PostgreSQL、SQLite
SELECT CURRENT_DATE AS today;
today |
---|
2020-10-14 |
– Oracle
SELECT CURRENT_DATE AS today
FROM dual;
TODAY |
---|
2020-10-14 08:22:55 |
– SQL Server
SELECT CAST(GETDATE() AS DATE) AS today;
today |
---|
2020-10-14 |
其中,Oracle 數(shù)據(jù)庫中的 DATE 類型包含了日期和時(shí)間兩部分信息;SQL Server 中的 GETDATE() 函數(shù)返回的是日期和時(shí)間信息,使用 CAST 函數(shù)轉(zhuǎn)換為日期;SQLite 返回的結(jié)果類型為字符串。
除了 CURRENT_DATE 函數(shù)之外,有些數(shù)據(jù)庫還實(shí)現(xiàn)了擴(kuò)展的函數(shù)。例如,MySQL 中的 CURDATE() 和 CURRENT_DATE() 函數(shù)也可以返回當(dāng)前日期:
– MySQL
SELECT CURDATE(), CURRENT_DATE();
CURDATE() | CURRENT_DATE() |
---|---|
2020-10-14 | 2020-10-14 |
Oracle 也可以使用 SYSDATE 函數(shù)獲取當(dāng)前日期,例如:
SELECT TRUNC(SYSDATE) AS today
FROM dual;
TODAY |
---|
2020-10-14 00:00:00 |
SYSDATE 函數(shù)同樣會(huì)返回日期和時(shí)間兩部分信息,使用 TRUNC 函數(shù)截?cái)鄷r(shí)間部分。
獲取昨天的日期
基于當(dāng)前日期減去一天,就可以獲得昨天的日期。對(duì)于 MySQL,可以使用以下語句:
– MySQL
SELECT CURRENT_DATE - INTERVAL ‘1’ DAY AS yesterday;
yesterday |
---|
2020-10-13 |
除了直接使用 + 或者 - 進(jìn)行加減運(yùn)算之外,MySQL 還提供了 SUBDATE、ADDDATE、DATE_SUB、DATE_ADD 函數(shù),具體可以參考 MySQL 常用日期時(shí)間函數(shù)。
對(duì)于 Oracle,可以直接使用 + 或者 - 進(jìn)行日期的加減運(yùn)算:
– Oracle
SELECT CURRENT_DATE - 1 AS yesterday
FROM dual;
YESTERDAY |
---|
2020-10-13 08:28:01 |
對(duì)于 SQL Server,可以使用 DATEADD 函數(shù)進(jìn)行日期的加減運(yùn)算:
– SQL Server
SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS yesterday;
yesterday |
---|
2020-10-13 |
對(duì)于 PostgreSQL,可以直接使用 + 或者 - 進(jìn)行日期加減運(yùn)算:
– PostgreSQL
SELECT CURRENT_DATE - 1 AS yesterday;
yesterday |
---|
2020-10-13 |
更多關(guān)于 PostgreSQL 常用日期時(shí)間函數(shù)的介紹,可以參考這篇文章。
對(duì)于 SQLite,可以使用 DATE(timestring, modifier, modifier, …) 函數(shù)實(shí)現(xiàn)日期的運(yùn)算:
– SQLite
SELECT DATE(CURRENT_DATE,’-1 days’) AS yesterday;
yesterday |
---|
2020-10-13 |
該函數(shù)返回結(jié)果的類型為字符串,更多的 SQLite 日期時(shí)間函數(shù)可以參考官方文檔。
獲取明天的日期
獲取明天的日期和獲取昨天的日期類似,將減法修改為加法即可。例如:
– MySQL
SELECT ADDDATE(CURRENT_DATE, 1) AS tomorrow;
tomorrow |
---|
2020-10-15 |
– Oracle
SELECT CURRENT_DATE + 1 AS tomorrow
FROM dual;
TOMORROW |
---|
2020-10-15 08:45:16 |
– SQL Server
SELECT CAST(DATEADD(DAY, 1, GETDATE()) AS DATE) AS tomorrow;
tomorrow |
---|
2020-10-15 |
– PostgreSQL
SELECT CURRENT_DATE + 1 AS tomorrow;
tomorrow |
---|
2020-10-15 |
– SQLite
SELECT DATE(‘now’, ‘1 days’) AS tomorrow;
總結(jié)
除了獲取系統(tǒng)日期之外,SQL 還定義了獲取時(shí)間 TIME 和時(shí)間戳 TIMESTAMP 的函數(shù),以及相關(guān)的處理函數(shù)和運(yùn)算符,具體可以參考這篇文章。