【问题标题】:Equate timestamp with day name in a query and get result set w.r.t day name in PostgreSQL query将时间戳与查询中的日期名称相等,并在 PostgreSQL 查询中获取结果集 w.r.t 日期名称
【发布时间】:2019-07-30 06:21:56
【问题描述】:

我想在 PostgreSQL 中将时间戳等同于日期名称,并且我希望结果集与日期名称相关。我也尝试使用子查询和一些函数,但出现语法错误和函数不存在 SQL 错误。请帮忙。

我尝试使用 to_char 和 to_timestamp 函数,但在将它们绑定到子查询时遇到语法错误。首先我编写了从时间戳中提取日期的查询。

select to_char(TO_TIMESTAMP(1534994169000 / 1000), 'Day');

然后我尝试在代码中显示的子查询中使用此查询。

select * from tests where testtimestamp = (to_timestamp(TO_TIMESTAMP(1531803015000 / 1000), 'Day'));

select * from tests where testtimestamp = (select to_timestamp(to_char(TO_TIMESTAMP(1534994169000 / 1000), 'Day')))

我得到的错误是

SQL 错误 [42883]: 错误: 函数 to_timestamp(timestamp with time zone, unknown) 不存在 提示:没有函数匹配给定 名称和参数类型。您可能需要添加显式类型转换。
位置:44 错误:函数 to_timestamp(带时区的时间戳, 未知)不存在 提示:没有函数匹配给定的名称和 参数类型。您可能需要添加显式类型转换。位置: 44 错误:函数 to_timestamp(带有时区的时间戳,未知) 不存在 提示:没有函数匹配给定的名称和参数 类型。您可能需要添加显式类型转换。位置:44

【问题讨论】:

标签: postgresql timestamp


【解决方案1】:

由于您的格式会生成文本输出(即星期三),因此您还需要对表中的时间戳字段进行转换以进行相等比较。我想是这样的。

select 
       * 
  from 
       tests 
 where 
       to_char(TO_TIMESTAMP(testtimestamp / 1000), 'Day') 
       = 
       to_char(TO_TIMESTAMP(1534994169000 / 1000), 'Day');

确保您使用 to_char 和 to_timestamp(在上面的第一个查询中,您执行了两次 to_timestamp,这就是导致错误的原因)。如果您碰巧解决了这个问题,您可能需要查看功能索引以加快速度。

【讨论】:

    【解决方案2】:

    您可以使用EXTRACT

    WHERE extract( day from testtimestamp)
       = extract ( day from TO_TIMESTAMP(1534994169000 / 1000) )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-16
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多