在 PostgreSQL 中,我有一个文本列,其中包含以这种格式表示事件开始和停止时间的值:“15:00-17:00”(例如,这是一个从下午 3 点开始到下午 5 点结束的事件)。我需要编写一个 SQL 查询来返回事件尚未结束的行。比如我在16:48查询,会返回上面的事件,因为还不到17:00。如果有帮助,我只关心小时值,分钟可以忽略。
如果数据在适当的时间字段中,这将是微不足道的,但我对如何在数据为文本时执行此操作感到困惑。我想我可以使用某种正则表达式来解析第二个小时的值,并可能将其与 CURRENT_TIME 结合起来进行某种比较,但我不确定如何将它们放在一起。
谁能帮帮我?
最佳答案
SELECT *
FROM tbl
WHERE now()::time BETWEEN left(time_col, 5)::time
AND right(time_col, 5)::time
这将返回表 tbl
中的所有行,其中当前本地时间 now()::time
位于编码在开始和结束之间column time_col
- 表示它们已经开始,但尚未结束。这显然需要 time_col
中格式正确的字符串与您问题中的模式完全匹配。
left()
and right()
已在 PostgreSQL 9.1 中引入。在旧版本中,您可以替换为 substr()
表达式,例如已经提供的 @lserni。
关于sql - 将文本字段中的时间值与当前时间进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13001920/