postgresql的now()与Oracle的sysdate区别说明

 更新时间:2020年12月28日 11:33:28   作者:丹心明月  
这篇文章主要介绍了postgresql的now()与Oracle的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");
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • PostgreSQL 日志文件的所在位置

    PostgreSQL 日志文件的所在位置

    这篇文章主要介绍了PostgreSQL 日志文件的所在位置,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql数据库执行计划图文详解

    postgresql数据库执行计划图文详解

    了解PostgreSQL执行计划对于程序员来说是一项关键技能,执行计划是我们优化查询,验证我们的优化查询是否确实按照我们期望的方式运行的重要方式,这篇文章主要给大家介绍了关于postgresql数据库执行计划的相关资料,需要的朋友可以参考下
    2024-01-01
  • PostgreSQL教程(九):事物隔离介绍

    PostgreSQL教程(九):事物隔离介绍

    这篇文章主要介绍了PostgreSQL教程(九):事物隔离介绍,本文主要针对读已提交和可串行化事物隔离级别进行说明和比较,需要的朋友可以参考下
    2015-05-05
  • PostgreSQL 对数组的遍历操作

    PostgreSQL 对数组的遍历操作

    这篇文章主要介绍了PostgreSQL 对数组的遍历操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Postgresql去重函数distinct的用法说明

    Postgresql去重函数distinct的用法说明

    这篇文章主要介绍了Postgresql去重函数distinct的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgres主备切换之文件触发方式详解

    postgres主备切换之文件触发方式详解

    这篇文章主要介绍了postgres主备切换之文件触发方式详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL实现按年、月、日、周、时、分、秒的分组统计

    PostgreSQL实现按年、月、日、周、时、分、秒的分组统计

    这篇文章介绍了PostgreSQL实现按年、月、日、周、时、分、秒分组统计的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • CentOS 7下安装PostgreSQL 9.6的教程分享

    CentOS 7下安装PostgreSQL 9.6的教程分享

    PostgreSQL在我心目中的地位要远远高于MySQL,虽然流行对比MySQL低很对,但是功能性一致走在MySQL的前面。下面这篇文章主要介绍了CentOS 7下安装PostgreSQL数据库的方法,需要的朋友可以参考借鉴,一起来看看吧。
    2017-02-02
  • 快速解决PostgreSQL中的Permission denied问题

    快速解决PostgreSQL中的Permission denied问题

    这篇文章主要介绍了快速解决PostgreSQL中的Permission denied问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL 中字段类型varchar的用法

    PostgreSQL 中字段类型varchar的用法

    这篇文章主要介绍了PostgreSQL 中字段类型varchar的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论