将时间戳与查询中的日期名称相等,并在 PostgreSQL 查询中获取结果集 w.r.t 日期名称
Posted
技术标签:
【中文标题】将时间戳与查询中的日期名称相等,并在 PostgreSQL 查询中获取结果集 w.r.t 日期名称【英文标题】:Equate timestamp with day name in a query and get result set w.r.t day name in PostgreSQL query 【发布时间】: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
【问题讨论】:
我不知道你想要达到什么目的。您能否请edit您的问题(通过单击其下方的edit 链接,不要在评论中发布)并添加一些sample data 和基于该数据的预期输出。 Formatted text 请no screen shots. 【参考方案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) )
【讨论】:
以上是关于将时间戳与查询中的日期名称相等,并在 PostgreSQL 查询中获取结果集 w.r.t 日期名称的主要内容,如果未能解决你的问题,请参考以下文章