从时间戳中丢弃毫秒部分

Dip*_*Sen 53 sql postgresql timestamp casting rounding

millisecond如果second零件也从timestampw/o中取出,我该如何丢弃/绕过零件timezone

Erw*_*ter 111

将其投射到timestamp(0)timestamptz(0)删除小数秒:

SELECT now()::timestamp(0);
Run Code Online (Sandbox Code Playgroud)

像@karlgold评论说,这以全秒,如果你跟上这个数据类型工作分数不存储.

使用date_trunc()更具体的需求.

SELECT date_trunc('second', now()::timestamp);
Run Code Online (Sandbox Code Playgroud)

截断(叶秒不变).进一步的操作可以重新引入小数秒.

当然,你可以将两者结合起来 - 这次也删除了第二部分:

SELECT now()::timestamp(0);
Run Code Online (Sandbox Code Playgroud)

但请注意,将此值分配给不同数据类型的列或变量可能会导致另一个赋值转换.

  • 请注意,timestamp(0)和timestamptz(0)将舍入而不是截断.如果要保留剩余的时间戳,请使用date_trunc. (12认同)

Yur*_*pka 8

丢弃毫秒:

SELECT DATE_TRUNC('second', CURRENT_TIMESTAMP::timestamp);
Run Code Online (Sandbox Code Playgroud)

2019-08-23 16:42:43

丢弃秒数:

SELECT DATE_TRUNC('minute', CURRENT_TIMESTAMP::timestamp);
Run Code Online (Sandbox Code Playgroud)

2019-08-23 16:42:00


Shr*_*lhe 5

如果你只是想要时间,这里是 postgres 的代码

SELECT DATE_TRUNC('second', CURRENT_TIMESTAMP::timestamp)::time;
Run Code Online (Sandbox Code Playgroud)

它将返回“没有时区的时间”数据类型