postgresql的now()為當(dāng)前事務(wù)開始時間,
而Oracle的sysdate是當(dāng)前時間。
區(qū)別在于事務(wù)。
postgresql中的now():
postgres=# begin ;
BEGIN
postgres=# select now();
now
-------------------------------
2017-03-31 14:28:32.403869+08
(1 row)
postgres=# select now();
now
-------------------------------
2017-03-31 14:28:32.403869+08
(1 row)
postgres=# select now();
now
-------------------------------
2017-03-31 14:28:32.403869+08
(1 row)
postgres=# end;
COMMIT
postgres=# select now();
now
-------------------------------
2017-03-31 14:28:54.917897+08
(1 row)
postgres=#
而Oracle中的sysdate在事務(wù)中是一直變化的。
總結(jié):
- postgresql的now()為當(dāng)前事務(wù)開始時間,如果調(diào)用now(),就會獲取事務(wù)開始的時間,而不是獲取的系統(tǒng)當(dāng)前的時間。
- Oracle的sysdate是獲取當(dāng)前時間,啥時候調(diào)用sysdate,就是啥時候的時間。
補(bǔ)充:mysql中now()函數(shù)的使用,還有oracle的sysdate,可能埋下的坑
mysql中now()函數(shù)的使用,還有oracle的sysdate
在需求中如果系統(tǒng)中藥添加當(dāng)前操作的時間那么很簡單的一個操作在寫sql的時候直接在這個字段對應(yīng)的位置寫上now()函數(shù)就可以了,這樣就少些了很多代碼,尤其是在在用jdbc時寫的時候,可以少寫一些關(guān)于占位符的代碼,但是這樣做是有一個隱含的前提的是數(shù)據(jù)庫和服務(wù)器是在同一個機(jī)器上的,如果不在同一臺機(jī)器上,那么這樣寫就是一個坑啊,我覺得沒有經(jīng)驗(yàn),沒有掉進(jìn)過坑的人就會這樣寫,比如我,偷懶就會這樣寫.等到用到這個時間來比較或者作為業(yè)務(wù)邏輯的判斷依據(jù)時,這個坑就出現(xiàn)了
lz在定位問題做業(yè)務(wù)的時候就遇到了,當(dāng)時,服務(wù)器在lz的電腦上,數(shù)據(jù)庫在遠(yuǎn)端,因?yàn)闃I(yè)務(wù)需要就把時間調(diào)到未來的一個時間點(diǎn),然后開始做,但是后來經(jīng)過了1周左右,偶然發(fā)現(xiàn)了一個表用的時間竟然時當(dāng)前的真是時間,我就有了這樣的猜測,應(yīng)該有一個程序員用了sysdate字段.盡管沒有明顯找到,但是應(yīng)該是用的,不然不會取到真實(shí)的時間啊.尤其一些需要遠(yuǎn)程調(diào)試的項(xiàng)目,同事對于編碼規(guī)范,我覺得sql的編碼規(guī)范也要把這一條加上去.
lz以前不懂也做過這樣的事情,現(xiàn)在只能提醒大家不要這樣做,然后改掉自己最近這樣寫的代碼.
建議用java生成new一個時間對象,如果用的是jdbc直接拼在sql里,可以不要用占位符.
//在dao中這樣寫
member(name,pw,register_time)value(?,?,'"+DbAssitor.sdfyyyyMMddHHmmss.format(new Date())+"');";
//數(shù)據(jù)庫助手類定義一個sdf類
public class DbAssitor
{
/** 數(shù)據(jù)庫相關(guān)操作中操作結(jié)果是沒有影響行數(shù) ***/
public static int NO_AFFECT_ROW = 0;
public static String sdfyyyyMMddHHmmss_ = "yyyy-MM-dd HH:mm:ss";
public static SimpleDateFormat sdfyyyyMMddHHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- PostgreSQL批量update與oracle差異詳解
- PostgreSQL通過oracle_fdw訪問Oracle數(shù)據(jù)的實(shí)現(xiàn)步驟