首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当应用于"DATE“列时,是否存在忽略datetime常量的”时间“部分的MySQL设置?

当应用于"DATE“列时,是否存在忽略datetime常量的”时间“部分的MySQL设置?
EN

Stack Overflow用户
提问于 2009-12-01 18:59:26
回答 2查看 1.9K关注 0票数 0

免责声明:这是一个旧的,丑陋的代码库,我宁愿不去碰它。

  • 数据库中有一个表,其中有一个DATE类型的列(以及其他列)。
  • 有一个带有java.util.Date参数的查询(由Torque标准自动生成--不要问);Torque将其格式化为完整的日期时间。

因此,MySQL正在获取的查询类似于:

代码语言:javascript
运行
复制
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()函数,而我更不愿意这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-01 20:04:50

显然我运气不好。来自MySQL手册

在MySQL 5.0.42之前,当DATE值与DATETIME值进行比较时,DATETIME值的时间部分被忽略,或者可以作为字符串比较来执行比较。从MySQL 5.0.42开始,通过将时间部分添加为'00:00:00',将DATE值强制为DATETIME类型。

如果有人发现自己处于类似的情况,我找到的唯一解决办法就是:

  1. java.util.Date实例的时间字段(小时/分钟/秒)重置为零。
  2. 修补程序(我指的是“修补程序”-没有办法插入您自己的适配器)Torque的DB适配器的getDateString()方法用于MySQL (org.apache.torque.adapter.DBMM),以检查日期的时间字段是否为零,如果是,则使用“仅日期”格式。
票数 1
EN

Stack Overflow用户

发布于 2011-01-09 15:06:19

这比修补扭矩更简单。

代码语言:javascript
运行
复制
Criteria cr = new Criteria();
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String fixedDate = dateFormat.format(date);
cr.add("my_date", (Object)("my_date = '" + fixedDate + "'"), Criteria.CUSTOM);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1828151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档