免责声明:这是一个旧的,丑陋的代码库,我宁愿不去碰它。
DATE
类型的列(以及其他列)。java.util.Date
参数的查询(由Torque标准自动生成--不要问);Torque将其格式化为完整的日期时间。因此,MySQL正在获取的查询类似于:
SELECT * FROM my_table
WHERE my_date = '20091201105320'; // 2009-12-01 10:53:20
问题是,在一个具有MySQL 5.0.27标准的服务器上,它工作得很好,就像从my_table
返回所有将my_date
设置为'2009-12-01‘的记录一样。在另一台具有MySQL 5.0.45的服务器上,它无法工作。数据就在那里--如果我在修剪掉时间部分后手动运行查询,就会得到正确的结果。
问题是:
是否在MySQL配置文件或每个会话变量(连接字符串)中,或者在其他地方,在字符串常量到日期转换期间,强制MySQL忽略时间部分?
显然,如果不更改代码库,我就不能使用DATE()
函数,而我更不愿意这样做。
发布于 2009-12-01 20:04:50
显然我运气不好。来自MySQL手册
在MySQL 5.0.42之前,当DATE
值与DATETIME
值进行比较时,DATETIME
值的时间部分被忽略,或者可以作为字符串比较来执行比较。从MySQL 5.0.42开始,通过将时间部分添加为'00:00:00'
,将DATE
值强制为DATETIME
类型。
如果有人发现自己处于类似的情况,我找到的唯一解决办法就是:
java.util.Date
实例的时间字段(小时/分钟/秒)重置为零。getDateString()
方法用于MySQL (org.apache.torque.adapter.DBMM
),以检查日期的时间字段是否为零,如果是,则使用“仅日期”格式。发布于 2011-01-09 15:06:19
这比修补扭矩更简单。
Criteria cr = new Criteria();
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String fixedDate = dateFormat.format(date);
cr.add("my_date", (Object)("my_date = '" + fixedDate + "'"), Criteria.CUSTOM);
https://stackoverflow.com/questions/1828151
复制相似问题