当谈到Oracle时,我并不是一个特别优秀的人,因为我对数据库的大部分经验都来自SQL服务器。用TRUNC和TO_DATE截断oracle中的java格式化日期()
我有一个java日期,我想转换为只是一个简单的日期(不包括时间或时区)在oracle中,所以我可以使用它与自定义mybatis SQL语句,将简单地搜索是否日期与用户界面上输入的日期相同。我的模拟oracle查询镜像MyBatis中发生的事情在下面写为我的失败WHERE子句。
我的日期以'Wed Jun 19 00:00:00 BST 2013'的格式输入Oracle,不幸的是我没有很多灵活性。
我的失败WHERE子句是这样的:
where TRUNC(s.logged_date) = to_date('Wed Jun 19 00:00:00 BST 2013', 'DD-MON-YYYY');
它失败,出现错误: ORA-01858:一个非数字字符被发现,其中一个数字预期。
我在表的日期被存储在一个DATE数据格式,我期待产生一个WHERE子句,使得
WHERE TRUNC(s.logged_date) = some date in the year
返回行。
使用WHERE子句,我正在寻找日期等价而不考虑时间。 s.logged_date中的值的格式是在DATE数据类型列中的DD-MON-YYYY中。
我真的希望你能够帮助我,因为我已经使用过任何我必须上手的书,并且在互联网上搜索了相当长的一段时间,试图产生一个正确的WHERE子句。
感谢
“表中的我的日期以DD-MON-YYYY格式存储” - 他们真的吗?如果是这样,*为什么*他们是这样存储的?你为什么不把它们存储在DATE字段中,这是一个日期,没有任何固有的格式?您需要区分真实数据以及它如何在SQL工具中进行格式化。 –
除非它有时间元素,否则不需要“trunc”'logged_date'值;你可以用'to_char(logged_date,'DD-MON-YYYY HH24:MI:SS')'来检查。你的'to_date'很明显使用了一个与字符串值不相似的格式掩码,所以不会令人惊讶的失败;它试图将'我们'当作一天的数字,从DD'开始。你是否必须处理参数值中的不同时区? –
@JonSkeet我对这一部分表示歉意。我想说的是,它是作为DATE数据类型存储的,数据在oracle中显示为格式DD-MON-YYYY(可能是默认值)。 我会为此编辑我的帖子。 –