请求提供基于不同精度datetime类型左连接两表的SQL语句
SQL实现带秒级与无秒级Datetime的左连接
要实现以table_2为左表,关联table_1获取对应value的需求,核心是将table_2中带秒的time字段转换为与table_1中无秒的date格式一致的整分钟时间,以此作为关联条件执行左连接。以下是不同主流数据库的实现语句:
MySQL/MariaDB
方法1:使用DATE_FORMAT格式化时间
SELECT t2.id, t2.time, t1.value FROM table_2 t2 LEFT JOIN table_1 t1 ON DATE_FORMAT(t2.time, '%Y-%m-%d %H:%i:00') = t1.date;
方法2:使用TRUNCATE截断(MySQL 8.0及以上版本支持)
SELECT t2.id, t2.time, t1.value FROM table_2 t2 LEFT JOIN table_1 t1 ON TRUNCATE(t2.time, MINUTE) = t1.date;
PostgreSQL
使用DATE_TRUNC函数截断到分钟级别:
SELECT t2.id, t2.time, t1.value FROM table_2 t2 LEFT JOIN table_1 t1 ON DATE_TRUNC('minute', t2.time) = t1.date;
SQL Server
通过DATEADD+DATEDIFF组合实现时间截断:
SELECT t2.id, t2.time, t1.value FROM table_2 t2 LEFT JOIN table_1 t1 ON DATEADD(MINUTE, DATEDIFF(MINUTE, 0, t2.time), 0) = t1.date;
以上语句都会将table_2的time字段转换为无秒的整分钟时间,与table_1的date字段精准匹配,最终得到你需要的左连接结果。
内容的提问来源于stack exchange,提问作者Datalearner
相关产品推荐
相关产品推荐

