【问题标题】:Convert fields to timestamp for comparison将字段转换为时间戳以进行比较
【发布时间】:2010-07-05 13:05:06
【问题描述】:

我有一个 Postres 数据库,想比较两个时间戳字段。

基本查询:

select t1.valu1, t1.valu2 from table1 as t1 where t1.valu1 == t1.valu2

带时间戳比较:

select t1.valu1, t1.valu2 from table1 as t1
where EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE  t1.valu1 )
  ==  EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE  t1.valu2 ) 

valu1 的示例值:
'14:50:15''10:50:15'

valu2:
'11:10:15', '17:50:15'

我想将valu1valu2 转换为时间戳并在之后进行比较。

// syntax of extract
EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '20:38:18');

我收到以下格式的错误:

EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE  t1.valu2 ) 

【问题讨论】:

    标签: php mysql database postgresql plpgsql


    【解决方案1】:

    您的示例值是 time 而不是 timestamp 的文本表示:

    '14:50:15', '10:50:15', '11:10:15', '17:50:15'
    

    根据后面的评论假设text 为源类型。

    将它们转换为 time 以消除比较中无关紧要的空白或前导 0 是有意义的。但对于简单的演员表,它必须是有效的时间格式:

    SELECT valu1, valu2
    FROM   table1
    WHERE  valu1::time = valu2::time
    

    如果您真的想比较“作为时间戳”,您需要使用 to_timestamp() 和匹配的格式模式:

    SELECT valu1, valu2
    FROM   table1
    WHERE  to_timestamp(valu1, 'HH24:MI:SS')
         = to_timestamp(valu2, 'HH24:MI:SS');
    

    但这几乎没有任何意义......

    【讨论】:

      【解决方案2】:

      你必须给,至少,一天,例如:

      select EXTRACT(EPOCH FROM '2010-07-05 20:38:18'::timestamptz);
      

      给予

      日期部分 ------------ 1278358698

      【讨论】:

      • 但在 pgsql 站点中我看到了我使用的语法,但在示例中它在引号中给出,而我的是一个字段值。所以我认为错误在那里?但我不知道如何转换
      • 我需要在where子句中使用
      • @cod 至于第一条评论,说得更清楚些;至于第二个,在where子句中完全一样。但真正的问题是——你为什么要比较时代?为什么不是 timestamptz 值本身?
      • 好吧,如果你的时间只是像小时:分钟:秒这样的字符串,你为什么不自己比较字符串呢?
      【解决方案3】:

      你可以直接施放它们:

      select dateintext1::timestamp - dateintext2::timestamp from ...
      

      注意,可以转换为时间、日期、时间戳等,只要字段中的格式正确即可。

      最好将文本字段转换为日期、时间或时间戳字段。

      alter table abc alter column texttime type timestamp using (texttime::timestamp);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 2013-08-13
        • 1970-01-01
        • 2020-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多