一、日期是如何存儲的
1、日期和時間的標準數據類型
日期和時間(DATETIME)存儲的標準SQL數據類型有3種
DATE:存儲日期。DATE的格式是YYYY-MM-DD,範圍是從0001-01-01到9999-12-31。
TIME:存儲時間。TIME的格式是HH:MI:SS.nn…,範圍是從00:00:00…到23:59:61.999…。
TIMESTAMP:存儲日期和時間。TIMESTAMP的格式是YYYY-MM-DD HH:MI:SS.nn…,範圍是從0001-01-01 00:00:00…到9999-12-31 23:59:61.999…。
2、DATETIME元素
DATETIME元素 有效範圍
YEAR 0001到9999
MONTH 01到12
DAY 01到31 HOUR 00到23
MINUTE 00到59
SECOND 00.000…到61.999…
3、不同實現的日期類型
產品 | 數據類型 | 用途 |
Oracle | DATE | 存儲日期和時間信息 |
SQL Server | DATETIME | 存儲日期和時間信息 |
SMALLDATETIME | 存儲日期和時間信息,但取值範圍小於DATETIME | |
DATE | 存儲日期值 | |
TIME | 存儲時間值 | |
MySQL | DATETIME | 存儲日期和時間值 |
TIMESTAMP | 存儲日期和時間值 | |
DATE | 存儲日期值 | |
TIME | 存儲時間值 | |
YEAR | 單字節,表示年 |
二、日期函數
日期函數用於調整日期和時間的數據外觀,以適當的方式顯示日期和時間數據、進行比較、計算日期之間的間隔等。
1、當前日期
從根本上來說,當前日期保存在數據庫所在的計算機上時,被稱爲系統日期。
不同實現裏獲取系統日期的方法:
SQL Server使用GETDATE()的函數獲取系統日期。
SELECT GETDATE()
MySQL使用NOW()函數獲取當前日期和時間。NOW被稱爲僞字段。
SELECT NOW()
Oracle使用SYSDATE函數獲取當前日期和時間,並使用了Oracle中的DUAL表。
SELECT SYSDATE FROM DUAL
2、時區
在處理日期和時間信息時,可能要考慮時區。不同時區,不同日期和時間信息。
3、時間和日期相加
SQL Server的DATEADD函數:
DATEADD(MONTH, 1, DATE_HIRE)
Oracle的ADD_MONTHS函數:
ADD_MONTHS(DATE_HIRE,1)
Oracle的日期增加一天:
DATE_HIRE + 1
MySQL使用ANSI標準的INTERVAL命令:
DATE_ADD(DATE_HIRE, INTERVAL 1 DAY)
4、其他日期函數
產品 | 日期函數 | 用途 |
SQL Server | DATEPART | 返回日期的某個元素的整數值 |
DATENAME | 返回日期的某個元素的文本值 | |
GETDATE() | 返回系統時間 | |
DATEDIFF | 返回兩個日期之間由指定日期元素表示的間隔,比如天數、分鐘數和秒數 | |
Oracle | NEXT_DAY | 返回指定日期之後的下一天(比如FRIDAY) |
MONTHS_BETWEEN | 返回兩個日期之間相差的月數 | |
MySQL | DAYNAME(date) | 顯示星期幾 |
DAYOFMONTH(date) | 顯示幾日 | |
DAYOFWEEK(date) | 顯示星期幾 | |
DAYOFYEAR(date) | 顯示一年中的第幾天 |
三、日期轉換
進行日期轉換的典型原因有:
比較不同數據類型的日期值;
把日期格式轉換爲字符串;
把字符串轉換爲日期格式。
ANSI的CAST操作符可以把一種數據類型轉換爲另一種,其基本語法如下:
CAST(EXPRESSION AS NEW_DATA_TYPE)
1、日期描述
日期描述由格式元素組成,用於從數據庫以期望的格式提取日期和時間信息。
常見的日期元素
2、日期轉換爲字符串
SQL Server使用的DATETIME
DATE_HIRE = DATETIME(MONTH, DATE_HIRE)
Oracle使用的TO_CHAR函數
TO_CHAR(DATE_HIRE, ‘Month dd, yyyy’)
3、字符串轉換爲日期
MySQL的STR_TO_DATE
STR_TO_DATE('01/01/2010 12:00:00 AM', '%m/%d/%Y %h:%i:%s %p')
SQL Server的CONVERT
CONVER(DATETIME,’02/25/2010 12:00:00 AM’)