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

有两个柱的地方,时间没有区域:最大的

  •  0
  • DDave  · 技术社区  · 5 年前

    我有两列一是 time 另一个 timestamp

    ALTER TABLE public.tour
        ADD COLUMN reprocess_toupdate timestamp without time zone DEFAULT NOW();
    ALTER TABLE public.tour
        ADD COLUMN reprocess_updated time without time zone DEFAULT NOW();
    

    当我执行时:

    select reprocess_toupdate, reprocess_updated 
    from tour 
    where reprocess_toupdate::date > reprocess_updated::date;
    

    我得到一个错误:

    错误:无法在没有时区的情况下强制转换类型time

    没有 ::date ,我得到这个错误:

    错误:运算符不存在:没有时区的时间戳>没有时区的时间

    1 回复  |  直到 5 年前
        1
  •  0
  •   Belayer    5 年前

    这是因为时间列没有日期组件。它的值范围是00:00:00-24:00:00。看见 Documentation 第8.5节日期/时间类型。因为它没有日期组件,所以不能将其强制转换为日期。正确的解决方案是将类型更改为“不带时区的时间戳”。如果不可能,则只比较时间或“重新附加”日期,然后比较:

    with dateset as
         (select '2019-06-02 13:00:00'::time without time zone tm, (now() - interval '1 day')::timestamp without time zone dt)
    select tm, dt, date_trunc('day', dt)+tm redt from dateset 
    
        2
  •  0
  •   None of your business    5 年前

    在这里工作:

    create temporary table so (id serial primary key, ts timestamp default now());
    
    insert into so (ts) values (now());
    
    select * from so where ts::date < now();
    

    输出:

    +------+----------------------------+
    | id   | ts                         |
    |------+----------------------------|
    | 1    | 2019-07-01 10:16:43.093662 |
    +------+----------------------------+