postgresql的now()與Oracle的sysdate區(qū)別說明
postgresql的now()為當(dāng)前事務(wù)開始時(shí)間,
而Oracle的sysdate是當(dāng)前時(shí)間。
區(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ù)開始時(shí)間,如果調(diào)用now(),就會(huì)獲取事務(wù)開始的時(shí)間,而不是獲取的系統(tǒng)當(dāng)前的時(shí)間。
- Oracle的sysdate是獲取當(dāng)前時(shí)間,啥時(shí)候調(diào)用sysdate,就是啥時(shí)候的時(shí)間。
補(bǔ)充:mysql中now()函數(shù)的使用,還有oracle的sysdate,可能埋下的坑
mysql中now()函數(shù)的使用,還有oracle的sysdate
在需求中如果系統(tǒng)中藥添加當(dāng)前操作的時(shí)間那么很簡(jiǎn)單的一個(gè)操作在寫sql的時(shí)候直接在這個(gè)字段對(duì)應(yīng)的位置寫上now()函數(shù)就可以了,這樣就少些了很多代碼,尤其是在在用jdbc時(shí)寫的時(shí)候,可以少寫一些關(guān)于占位符的代碼,但是這樣做是有一個(gè)隱含的前提的是數(shù)據(jù)庫和服務(wù)器是在同一個(gè)機(jī)器上的,如果不在同一臺(tái)機(jī)器上,那么這樣寫就是一個(gè)坑啊,我覺得沒有經(jīng)驗(yàn),沒有掉進(jìn)過坑的人就會(huì)這樣寫,比如我,偷懶就會(huì)這樣寫.等到用到這個(gè)時(shí)間來比較或者作為業(yè)務(wù)邏輯的判斷依據(jù)時(shí),這個(gè)坑就出現(xiàn)了
lz在定位問題做業(yè)務(wù)的時(shí)候就遇到了,當(dāng)時(shí),服務(wù)器在lz的電腦上,數(shù)據(jù)庫在遠(yuǎn)端,因?yàn)闃I(yè)務(wù)需要就把時(shí)間調(diào)到未來的一個(gè)時(shí)間點(diǎn),然后開始做,但是后來經(jīng)過了1周左右,偶然發(fā)現(xiàn)了一個(gè)表用的時(shí)間竟然時(shí)當(dāng)前的真是時(shí)間,我就有了這樣的猜測(cè),應(yīng)該有一個(gè)程序員用了sysdate字段.盡管沒有明顯找到,但是應(yīng)該是用的,不然不會(huì)取到真實(shí)的時(shí)間啊.尤其一些需要遠(yuǎn)程調(diào)試的項(xiàng)目,同事對(duì)于編碼規(guī)范,我覺得sql的編碼規(guī)范也要把這一條加上去.
lz以前不懂也做過這樣的事情,現(xiàn)在只能提醒大家不要這樣做,然后改掉自己最近這樣寫的代碼.
建議用java生成new一個(gè)時(shí)間對(duì)象,如果用的是jdbc直接拼在sql里,可以不要用占位符.
//在dao中這樣寫 member(name,pw,register_time)value(?,?,'"+DbAssitor.sdfyyyyMMddHHmmss.format(new Date())+"');"; //數(shù)據(jù)庫助手類定義一個(gè)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"); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
navicat連接postgresql、人大金倉等數(shù)據(jù)庫報(bào)錯(cuò)解決辦法
在使用Navicat操作數(shù)據(jù)庫時(shí),遇到數(shù)據(jù)報(bào)錯(cuò)是一個(gè)常見的問題,這類問題可能涉及多個(gè)方面,下面這篇文章主要給大家介紹了關(guān)于navicat連接postgresql、人大金倉等數(shù)據(jù)庫報(bào)錯(cuò)的解決辦法,需要的朋友可以參考下2024-08-08postgresql之使用lsn 獲取 wal文件名的實(shí)例
這篇文章主要介紹了postgresql之使用lsn 獲取 wal文件名的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL進(jìn)行重置密碼的方法小結(jié)
今天想測(cè)試一個(gè)PostgresSQL語法的 SQL,但是打開PostgresSQL之后沉默了,密碼是什么?日長(zhǎng)月久的,漸漸就忘記了,于是開始了尋找密碼的道路,所以本文介紹了Postgresql忘記密碼,如何重置密碼,需要的朋友可以參考下2024-05-05Navicat設(shè)置PostgreSQL數(shù)據(jù)庫的表主鍵ID自增的方法
這篇文章主要介紹了Navicat設(shè)置PostgreSQL數(shù)據(jù)庫的表主鍵ID自增的方法,文章通過圖文結(jié)合的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-06-06PostgreSQL實(shí)現(xiàn)交叉表(行列轉(zhuǎn)換)的5種方法示例
這篇文章主要給大家介紹了關(guān)于PostgreSQL實(shí)現(xiàn)交叉表(行列轉(zhuǎn)換)的5種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08postgresql 實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入導(dǎo)出
這篇文章主要介紹了postgresql 實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入導(dǎo)出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12postgresql 計(jì)算距離的實(shí)例(單位直接生成米)
這篇文章主要介紹了postgresql 計(jì)算距離的實(shí)例(單位直接生成米),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01