开发者社区> 问答> 正文

MYSQL between 条件问题

最新的druid 1.1.6 版本 between 条件解析问题 select * from travelrecord a where a.createtime between date_sub(now(),interval 1 day) and now(); conditions解析为:[travelrecord.createtime BETWEEN (null, Wed Jan 31 18:23:34 CST 2018)]

原提问者GitHub用户Oloong

展开
收起
山海行 2023-07-05 22:10:37 50 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    Between 是 MySQL 中一个特殊的关键词,用于指定一个范围。在查询中使用 Between 关键字时,需要指定一个起始值和一个结束值,Between 关键字会返回这两个值之间的所有值。
    例如,下面的查询将返回年龄在 18 到 25 之间的所有员工信息:

    SELECT * FROM employees WHERE age BETWEEN 18 AND 25;
    CopyCopyCopy

    在上面的查询中,Between 关键字用于指定 age 列的范围,18 和 25 是起始值和结束值。查询结果将包含所有年龄在 18 到 25 之间的员工信息。
    另外,还可以使用 AND 运算符来组合多个 Between 条件,例如:

    SELECT * FROM employees WHERE age BETWEEN 18 AND 25 AND salary BETWEEN 5000 AND 10000;
    CopyCopyCopy

    在上面的查询中,同时指定了 age 和 salary 的范围,查询结果将包含所有年龄在 18 到 25 之间,且薪资在 5000 到 10000 之间的员工信息。
    在使用 Between 关键字时,需要注意以下几点:

    1. Between 关键字只能用于范围查询,不能用于其他类型的查询。
    2. Between 关键字中的起始值和结束值必须是常量,不能是变量或表达式。
    3. 如果起始值或结束值包含了边界值,那么 Between 关键字会返回包括边界值在内的所有值。例如,下面的查询将返回年龄等于 18 或 25 的员工信息:

    SELECT * FROM employees WHERE age BETWEEN 18 AND 25;
    CopyCopyCopy

    在上面的查询中,Between 关键字包含了起始值和结束值,因此查询结果将包含所有年龄等于 18 或 25 的员工信息。如果要排除边界值,可以使用 >= 和 <= 运算符。

    2023-07-29 22:49:33
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据您提供的信息,您的查询语句是使用了 BETWEEN 条件来筛选 travelrecord 表中 createtime 字段的数据。条件是 a.createtime 在某个时间范围内,这个时间范围是从当前时间的前一天到当前时间。

    您提到该条件解析为 [travelrecord.createtime BETWEEN (null, Wed Jan 31 18:23:34 CST 2018)],这表明代码中的 now() 未能正常获取当前时间,并返回了一个 null 值。因此,解析时出现了日期不正确的问题。

    建议您检查以下几个方面来解决此问题:

    确保代码环境能正确获取当前时间。检查您的代码中是否存在任何可能影响 now() 函数调用返回正确时间的问题。

    检查数据库服务器的时间设置。确保数据库服务器的时间和时区设置正确,并与应用程序所使用的时间相匹配。

    确保您使用的 now() 函数正确返回当前时间。在MySQL中,您可以使用 SELECT NOW(); 来测试 now() 函数是否能返回正确的当前时间。

    请注意,上述解决方案是基于您提供的信息,并假设您的查询语句和数据库环境在其他方面是正确的。如有需要,请提供更多详细的信息,以便我能更好地帮助您解决问题。

    2023-07-07 12:04:14
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 12:45:08
    赞同 展开评论 打赏
  • 修改查询语句:尝试使用具体的日期值代替date_sub(now(),interval 1 day),例如'2022-10-01'。这样可以绕过解析问题。

    2023-07-06 08:25:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像