从 Postgres 中的日期提取工作日、毫秒、微秒、纳秒

Pri*_*iya 4 sql postgresql datepart

如何从 Postgres 中的日期中提取毫秒、工作日、微秒、纳秒。我也尝试过提取方法,但找不到完全等效的方法。

poz*_*ozs 7

我不确定您在寻找什么等效项,但是:

  • PostgreSQL 中没有纳秒精度:对于类型,p (精度)的允许范围是从 0 到 6 。timestampinterval
  • 一些日期部分包含其他部分:即milliseconds包含seconds&microseconds包含milliseconds(因此也是seconds如此)。

如果您正在寻找逻辑上独立的值,则需要进行一些数学运算,例如:

select extract(dow from ts) dow,       -- day-of-week (where weeks start on sunday, which is 0)
       extract(isodow from ts) isodow, -- ISO day-of-week (where weeks start on monday, which is 1)
       floor(extract(seconds from ts))::int only_seconds,
       floor(extract(milliseconds from ts))::int - 1000 * floor(extract(seconds from ts))::int only_milliseconds,
       floor(extract(microseconds from ts))::int - 1000 * floor(extract(milliseconds from ts))::int only_microseconds,
       extract(microseconds from ts) all_microseconds
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在查看时间戳在其实际一周内的距离,您也可以使用timestamp(and interval) 算术:

select ts - date_trunc('week', ts) time_elapsed_since_monday
Run Code Online (Sandbox Code Playgroud)

(尽管计算从周日开始的周数相当困难:date_trunc仅适用于 ISO 周)。

http://rextester.com/SOOO48159