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