您好,登錄后才能下訂單哦!
now()與sysdate的區別是什么?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
postgresql的now()為當前事務開始時間,
而Oracle的sysdate是當前時間。
區別在于事務。
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在事務中是一直變化的。
總結:
- postgresql的now()為當前事務開始時間,如果調用now(),就會獲取事務開始的時間,而不是獲取的系統當前的時間。
- Oracle的sysdate是獲取當前時間,啥時候調用sysdate,就是啥時候的時間。
補充:mysql中now()函數的使用,還有oracle的sysdate,可能埋下的坑
mysql中now()函數的使用,還有oracle的sysdate
在需求中如果系統中藥添加當前操作的時間那么很簡單的一個操作在寫sql的時候直接在這個字段對應的位置寫上now()函數就可以了,這樣就少些了很多代碼,尤其是在在用jdbc時寫的時候,可以少寫一些關于占位符的代碼,但是這樣做是有一個隱含的前提的是數據庫和服務器是在同一個機器上的,如果不在同一臺機器上,那么這樣寫就是一個坑啊,我覺得沒有經驗,沒有掉進過坑的人就會這樣寫,比如我,偷懶就會這樣寫.等到用到這個時間來比較或者作為業務邏輯的判斷依據時,這個坑就出現了
lz在定位問題做業務的時候就遇到了,當時,服務器在lz的電腦上,數據庫在遠端,因為業務需要就把時間調到未來的一個時間點,然后開始做,但是后來經過了1周左右,偶然發現了一個表用的時間竟然時當前的真是時間,我就有了這樣的猜測,應該有一個程序員用了sysdate字段.盡管沒有明顯找到,但是應該是用的,不然不會取到真實的時間啊.尤其一些需要遠程調試的項目,同事對于編碼規范,我覺得sql的編碼規范也要把這一條加上去.
lz以前不懂也做過這樣的事情,現在只能提醒大家不要這樣做,然后改掉自己最近這樣寫的代碼.
建議用java生成new一個時間對象,如果用的是jdbc直接拼在sql里,可以不要用占位符.
//在dao中這樣寫 member(name,pw,register_time)value(?,?,'"+DbAssitor.sdfyyyyMMddHHmmss.format(new Date())+"');"; //數據庫助手類定義一個sdf類 public class DbAssitor { /** 數據庫相關操作中操作結果是沒有影響行數 ***/ 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"); }
看完上述內容,你們掌握now()與sysdate的區別是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。