如何选择小于时间戳的日期和时间?
Posted
技术标签:
【中文标题】如何选择小于时间戳的日期和时间?【英文标题】:How to select date and time less than a timestamp? 【发布时间】:2019-07-26 13:56:52 【问题描述】:我正在进行连接,并且必须选择日期和时间小于特定日期和时间的行。我的表中有一个日期和时间列(组合),称为“小时”。
我正在尝试将字符串转换为 where 子句中的时间戳(通过使用 to_timestamp)。如果将 where 子句更改为选择查询,则它本身就完美无缺。但是在我的代码中使用(join)时,会导致语法错误。
Select
t1.revenue,
t2.impressions
from t1
left join t2 on t1.id = t2.id
where t2.hour < to_timestamp('2019-07-24 23:59:59','YYYY-MM-DD HH24:MI:SS')
我的“where”子句附近出现语法错误。
【问题讨论】:
Postgres?还是 mysql? t1.revenue 后缺少逗号? 见:Why should I provide an MCVE for what seems to me to be a very simple SQL query? @Strawberry 无需反对。这是一个 Postgres 问题。 @TimBiegeleisen 有各种需要。 【参考方案1】:语法错误可能是由SELECT
子句中缺少逗号引起的。但除此之外,您的查询还有其他问题。考虑这个更新版本:
select
t1.revenue,
t2.impressions
from t1
left join t2
on t1.id = t2.id and
t2.hour < '2019-07-24 23:59:59'::timestamp;
鉴于您正在进行从t1
到t2
的左连接,当前出现在WHERE
子句中的t2
的限制很可能应该移至连接的ON
子句。不这样做可能意味着过滤掉来自t1
的记录,这会破坏左连接的目的。
另外请注意,您可以只使用::timestamp
将字符串文字转换为时间戳,但您甚至可能不需要这样做。
【讨论】:
您好!我已经编辑了逗号,我只是在写下我的问题时犯了这个错误。 我不太了解从 t1 部分过滤掉记录的部分。我认为在左连接中,不会过滤来自 t1 的记录。 where 条件仅将 t2 中将要加入的条目列入候选名单。 完全不正确。您当前的WHERE
子句绝对可以删除任何与一小时不匹配的 t1
记录。
t1 中没有“小时”列。这就是为什么我对 t2 中的过滤时间如何从 t1 中删除条目感到困惑
假设t1
中的每条记录最多只能匹配t2
中的一条记录。然后发生连接,然后应用WHERE
子句。如果您在WHERE
子句中对t2.hour
施加限制,那么t1
中任何不符合小时要求的记录都将被删除。这可能发生在不匹配的连接 或 但具有错误 t2.hour
值的匹配连接上。我的版本保证每条t1
记录都会出现在结果集中。【参考方案2】:
您的问题是,SELECT
子句中缺少逗号“,”。
【讨论】:
以上是关于如何选择小于时间戳的日期和时间?的主要内容,如果未能解决你的问题,请参考以下文章
我如何将 Bootstrap 3 Datepicker 自定义为仅没有时间戳的日期