原来用MySQL数据库的,时间列是用datatime的  显示时间格式是YYYY-MM-DD hh:mm:ss的
现在换PostgreSQL数据库了  时间的类型我查了下 有timestamp with time zone类型和timestamp without time zone类型
timestamp with time zone类型显示的是"2010-04-13 09:37:11.89+09" 最后有个时区的显示,格式也不对
timestamp without time zone类型显示的是虽然是YYYY-MM-DD hh:mm:ss格式,
但是我现在假如设定了时间列的类型为timestamp without time zone,我更新现在时间update xx set dt=now()  结果秒的位置出来了好几位  比如2010-04-13 09:37:11.265
我知道可以用 SET updatedt= CAST(to_char(now(), 'YYYY/MM/DD HH24:MI:SS') As timestamp without time zone)
这种方式来转换,但是有没有能够在建表的时候  能够和MySQL的datatime一样的类型呢  更新的时候set dt=now() 时间也是YYYY-MM-DD hh:mm:ss格式  
主要是我不太想动SQL文了  如果要这么转换太麻烦了
请教大虾们~~

解决方案 »

  1.   

    timestamp是精确到毫秒级,小数点后面是表示毫秒。
    应该不影响你的应用,大部分的客户端软件表示时间都精确到秒,所以传送到客户端都会截取到秒。
      

  2.   

    测试了一下,确实是这样,搜索了一下,似乎POSTGRESQL要准确到毫秒
      

  3.   

    找到了  timestamp(0) without time zone 类型改成这个就可以了  
    就如上面人说的 我把小数位的位数设置成0  更新也没问题了  
    和大家分享下吧  
    如果大家用pgAdmin工具创建表的话  添加列的中哟有个长度设置成0就可以了
      

  4.   

    timestamp [ (p) ] [without time zone]
    time ,timestamp 和interval 接受一个可选的精度值 p,这个精度值声明在秒域后面小数点之后保留的位数。 缺省的时候在精度上是没有明确的绑定的, p 有用的范围对 timestamp和 interval 是从 0 到大约 6。 对于 time 类型,如果使用了八字节的整数存储,那么 p 允许的范围是从 0 到 6,如果使用的是浮点数存储,那么这个范围是 0 到 10。参考:
    http://www.pgsqldb.org/pgsqldoc-8.1c/datatype-datetime.html
      

  5.   

    ALTER TABLE "EE" ADD COLUMN "DD" timestamp(0) without time zone;
    这样就OK了
      

  6.   

    这正是POSTGRESQL的优点,它的日期时间数据类型存储可以精确到毫秒,而MYSQL只能到秒,虽然MYSQL处理时间的函数也可由支持毫秒。