You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何基于分离的日期和时间列查询时间区间数据

解决分离日期和时间列的区间查询问题

你的原SQL语句在语法和逻辑上都存在问题,核心是BETWEEN用法错误,且条件拼接混乱。下面给你两种可行的解决方案:

方法一:拼接日期和时间为完整datetime后比较

把日期列data和时间列Var3拼接成完整的日期时间值,再用BETWEEN筛选区间。不同数据库的拼接语法略有差异,以下是常见数据库的写法:

MySQL/MariaDB

SELECT * FROM prices.prices
WHERE CONCAT(data, ' ', Var3) BETWEEN '2020-01-06 12:41' AND '2020-01-10 14:59';

PostgreSQL

SELECT * FROM prices.prices
WHERE (data || ' ' || Var3)::timestamp BETWEEN '2020-01-06 12:41' AND '2020-01-10 14:59';

SQL Server

SELECT * FROM prices.prices
WHERE CAST(data AS VARCHAR) + ' ' + Var3 BETWEEN '2020-01-06 12:41' AND '2020-01-10 14:59';

这种写法简洁直观,但要注意:如果data和Var3单独建有索引,拼接后的表达式无法利用索引,数据量大时性能会受影响。

方法二:拆分日期和时间条件(推荐,性能更优)

通过逻辑分支分别处理起始日、结束日和中间日期的条件,这样可以利用data和Var3的索引:

SELECT * FROM prices.prices
WHERE 
  -- 起始日期:时间需大于等于12:41
  (data = '2020-01-06' AND Var3 >= '12:41')
  -- 中间日期:所有时间都符合
  OR (data BETWEEN '2020-01-07' AND '2020-01-09')
  -- 结束日期:时间需小于等于14:59
  OR (data = '2020-01-10' AND Var3 <= '14:59');

原语句的错误说明

  1. BETWEEN语法错误:BETWEEN要求前后是同类型的单个值,你把日期和时间的比较结果(布尔值)作为BETWEEN的参数,完全不符合语法规则。
  2. 条件逻辑混乱:原语句用AND连接了多个不相关的条件,导致数据库无法理解你的筛选意图。

内容的提问来源于stack exchange,提问作者KRS Cristian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:06:28