代码之家  ›  专栏  ›  技术社区  ›  springcorn

PostgreSQL时区提取函数

  •  2
  • springcorn  · 技术社区  · 6 年前

    我用PostgreSQL extract

    select extract (month from adate) from atable
    

    adate 是一个 timestamp with time zone

    有没有办法得到某个特定时区的日期的月份/季度/年份?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Jasen    6 年前

    基本上你所做的就是使用 AT TIME ZONE 运营商共同转换 TIMESTAMP WITH TIMEZONE TIMESTAMP WITHOUT TIMEZONE 然后对其应用date_part(AKA extract)操作

    如果需要特定时区:

      select extract(month from adate AT TIME ZONE 'CST' ) from atable;
    

    如果需要特定的位置:这将遵循过去日期的历史日光节约规则(和其他法定时区更改),并假定未来日期的当前规则。

      select extract(month from adate AT TIME ZONE 'America/Detroit' ) from atable;
    

    也许一个使用过的定义函数将有助于hibernate。

     CREATE OR REPLACE FUNCTION date_part_in_zone
         ( part text, instant timestamptz, zone text) 
         returns double precision language sql as 
         'SELECT date_part(part, instant AT TIME ZONE zone)';
    

    上面的日期部分是“提取”后面的功能之一。