sql - Postgresql比较varchar和时间类型

标签 sql postgresql

在 PostgreSQL 中,我需要在数据类型不同的两个列之间进行 LEFT JOIN。其中一个是varchar,另一个是time

LEFT JOIN my_table ON r.varchar_time = my_table.time

如何使用 to_char 比较它们?

最佳答案

类型转换可以使用缩写语法,例如 ::time 因此,您可以使用:

LEFT JOIN my_table ON r.varchar_time::time = my_table.time

但是,如果有任何值不能转换为时间,则可能会出错。您可能会朝相反的方向前进,但现在您必须确保 varchar 转换生成的格式与其他列的格式相匹配。

LEFT JOIN my_table ON r.varchar_time = my_table.time::varchar

无论哪种方式,您都有潜在的问题。理想情况下,varchar 列也是时间。

我看到的另一个可能的问题是时间精度也可能是一个问题,但这取决于您填充列的方式。

测试:

select
      (current_timestamp::time)::varchar "varchar"
     , current_timestamp::time "time"

+-----------------+------------------+
|     varchar     |       time       |
+-----------------+------------------+
| 00:50:20.703713 | 00:50:20.7037130 |
+-----------------+------------------+

从这个测试中可以看出,varchar 数据的“格式”很重要

关于sql - Postgresql比较varchar和时间类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383686/

相关文章:

postgresql - Postgres : create a sequence like 0000001 to 00000n

mysql - 使用子查询中的 GROUP BY 查询获取行数

sql - 复合类型的多个插入

postgresql - varchar postgresql 的 double

postgresql - 如何从 plpgsql 中的多个表返回多行?

java - Hibernate HQL select 与 where order by 查询不同

ruby-on-rails - 如何在 Ruby on the Rails 查询中使用外键?

sql - 高磁盘IO率

SQL Server 开发者版最大大小容量

mysql - 好友列表和未读消息 SQL 查询给出意外结果