八種數據庫時間函數的簡單總結
PG,SQLSERVER,Oracle,MySQL,達夢,神通,人大金倉,瀚高.
簡單總結一下
1. PG,神通,人大金倉,瀚高 基本上一樣:
都可以使用now()獲取時間 age獲取時間間隔(神通是天數,其他的年月數),extract獲取時間數據的部分內容.
使用 + 或者是 - interval '3 days' 表示三天后或者是三天前或者是其他時間單位的時間數值.
2. Oracle數據庫和達夢數據庫基本上一樣:
使用 select sysdate from dual 可以獲取當前時間
使用 也可以使用 + 或者是 - interval '數字' 單位(單數形式) from dual 來獲取
注意1: 這兩類存在較大的不同是 PG系可以使用復數形式,並且需要放到hard quote 里面 Oracle 只需要將數字放到單引號. 日期類型必須單數.
注意2: oracle必須有from 達夢可以有 from dual 也可以沒有.
3. SQLSERVER 數據庫自稱一派, 使用 select getdate()的方式獲取日期. dateadd和datediff函數進行時間計算.
4. Mysql數據庫比較偏向於PG數據庫. 但是需要注意的是 他有 date_add 函數 還有 dayofyear dayofmonth等的函數.
1. PG數據庫
獲取當前時間
now()
select now() ;
其他函數
# 時間戳
select current_timestamp;
# 日期
select current_date;
# 時間
select current_time;
1. PG數據庫
# 時間計算
select now() + interval '2 years';
select now() - interval '2Y';
# 部分簡寫以及含義
Y Years
M Months (in the date part)
W Weeks
D Days
H Hours
M Minutes (in the time part)
S Seconds
# 時間間隔
age
select age(timestamp '2013-11-27');
# 時間截取
extract
select extract(doy from now());
# 注意是 day of year 的簡寫
select extract(week from now());
select extract(month from now());
2. SQLSERVER數據庫
# 獲取當前時間
select getdate()
# 時間計算
dateadd(datepart,number,date)
select dateadd(year,-2,getdate())
# 時間差值計算
datediff( date-part, startdate, enddate )
# 比如計算有從出生有多少天
select datediff( day, '2013-11-27',getdate() )
# 獲取部分時間內容
# datepart
SELECT DATEPART(Second, getdate()) as '秒數'
3. Oracle數據庫
# 注意 oracle的時間函數里面 沒有括號 真TM亂啊
# 注意 Oracle 必須從虛標里面查. NND真特殊.
# 獲取當前時間
select sysdate from dual
# 設置時間格式
select to_char(sysdate,'yyyy-mm-dd hh24:mi') from dual;
# 也可以僅獲取部分內容
select to_char(sysdate,'hh24') from dual;
# 時間計算
# 獲取七天后的日期
# 注意 這一點 oracle與PG的計算時間前后的函數是一樣的.
select sysdate,sysdate + interval '7' DAY from dual;
4. 達夢數據庫
# 獲取當前時間
SELECT sysdate()
# 注意達夢為了實現oracle兼容也可以使用 oracle的語法進行處理
select sysdate from dual
# 而且他還可以帶括號
select sysdate() from dual
# 他的可以完全模仿Oracle來處理
# 設置時間格式
select to_char(sysdate,'yyyy-mm-dd hh24:mi') from dual;
# 也可以僅獲取部分內容
select to_char(sysdate,'hh24') from dual;
# 時間計算
# 獲取七天后的日期
# 注意 這一點 oracle與PG的計算時間前后的函數是一樣的.
select sysdate,sysdate + interval '7' DAY from dual;
# 其他的先不管了...
5. MySQL數據庫
# 獲取當前時間
select now();
# 還可以用如下的函數
current_timestamp(),current_timestamp,localtime(),localtime
# 跟PG一樣 用 now獲取
# 還有另外一個函數 sysdate 但是存在區別
#sysdate() 日期時間函數跟 now() 類似,不同之處在於:
#now() 在執行開始時值就得到了,sysdate() 在函數執行時動態得到值。
select now(), sleep(1), now();
select sysdate(), sleep(1), sysdate();
# 注意秒數 是不一樣的.
# 只獲取當前日期
select curdate();
# 只獲取當前時間
select curtime();
# 獲取時間的部分內容
select extract(month from sysdate())
# 這個函數跟PG的是一樣的.
5. MySQL數據庫
# 獲取時間是本周/本月/本年的天數
select dayofweek(sysdate());
select dayofmonth(sysdate());
select dayofyear(sysdate());
# MySQL 返回星期和月份名稱函數:dayname(), monthname()
select dayname(sysdate())
select monthname(sysdate())
# 注意西方世界 Sunday 是First day of The week.
# MySQL其他的時間計算函數
date_add
select date_add(sysdate(),interval -3 year)
# 注意這里面沒有復數形式.
# 計算時間差值
select datediff('2013-11-27',sysdate())
# 這個出來是負數.
6. 神通數據庫
# 懷疑神通數據庫的函數和內核比較偏向於PG.
# 獲取當前時間
select now();
# 驗證了一下果然和PG很相似基本通用.
# 時間計算
select now() + interval '2 years';
select now() - interval '2Y';
# 時間間隔
age
select age(timestamp '2013-11-27');
# 時間截取
extract
select extract(doy from now());
# 注意是 day of year 的簡寫
select extract(week from now());
select extract(month from now());
7. 人大金倉數據庫
#發現跟神通數據庫一樣 時間函數和PG也是相同的
select now();
# 驗證了一下果然和PG很相似基本通用.
# 時間計算
select now() + interval '2 years';
select now() - interval '2Y';
# 部分簡寫以及含義
# 時間間隔
age
select age(timestamp '2013-11-27');
# 時間截取
extract
select extract(doy from now());
# 注意是 day of year 的簡寫
select extract(week from now());
select extract(month from now());
8.瀚高數據庫
# 與PG數據庫基本一致..