在PostgreSQL中,我需要在两个数据类型不同的列之间建立一个LEFT JOIN。其中一个是varchar
,另一个是time
LEFT JOIN my_table ON r.varchar_time = my_table.time
如何通过使用to_char比较它们?
答案 0 :(得分:1)
Postgres具有转换from one datatype to another的功能。从文档中:
to_timestamp(text, text)
,带有时区的时间戳,将字符串转换为时间戳
示例:to_timestamp('05 Dec 2000', 'DD Mon YYYY')
您的代码可能看起来像这样,无论您使用哪种格式来匹配另一列。
LEFT JOIN my_table ON to_timestamp(r.varchar_time, 'HH:mm:ss') = my_table.time
答案 1 :(得分:1)
类型转换可以使用缩写语法,例如::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数据的“格式”很重要