sql - 将文本字段中的时间值与当前时间进行比较

标签 sql regex postgresql

在 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/

相关文章:

sql - mysql为每场比赛设置一个标志

SQL 选择所有联接值都等于值的位置

c# - 使用自定义分页优化搜索 SQL

objective-c - NSString:blabla.DDD+DDDD 的正则表达式,其中 D 是数字

java - 替换文件中的一系列新行

java - 在 Flyway Java API 中使用 SQL 迁移文件

postgresql - 在没有停机的情况下将 `int` 迁移到 PostgresQL 中的 `bigint`?

python - 如何做二级多对多关系?

regex - 使用可选参数重写规则以在 .htaccess 中进行重定向

sql - 使用 3 个表连接获取 API 列表