最新的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
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 关键字时,需要注意以下几点:
SELECT * FROM employees WHERE age BETWEEN 18 AND 25;
CopyCopyCopy
在上面的查询中,Between 关键字包含了起始值和结束值,因此查询结果将包含所有年龄等于 18 或 25 的员工信息。如果要排除边界值,可以使用 >= 和 <= 运算符。
根据您提供的信息,您的查询语句是使用了 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() 函数是否能返回正确的当前时间。
请注意,上述解决方案是基于您提供的信息,并假设您的查询语句和数据库环境在其他方面是正确的。如有需要,请提供更多详细的信息,以便我能更好地帮助您解决问题。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
修改查询语句:尝试使用具体的日期值代替date_sub(now(),interval 1 day),例如'2022-10-01'。这样可以绕过解析问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。