使用TRUNC和TO_DATE()在oracle中截断java格式的日期

时间:2013-06-27 16:40:53

标签: java oracle mybatis

对于Oracle来说,我不是一个特别优秀的人,因为我对数据库的大部分经验都来自SQL服务器。

我有一个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子句。 / p>

由于

2 个答案:

答案 0 :(得分:2)

你的问题在这里:

to_date('Wed Jun 19 00:00:00 BST 2013', 'DD-MON-YYYY')

字符串'Wed Jun 19 00:00:00 BST 2013' not 匹配格式掩码'DD-MON-YYYY'。 您需要将格式为'19 -JUN-2013'的字符串与格式掩码匹配,否则格式掩码应为'DAY MON DD HH24:MI:SS TZD YYYY'。但是,如果您选择更改格式掩码以匹配日期字符串,则您将无法使用to_date(),因为to_date()不支持时区。如果要在日期/时间字符串中支持时区,则需要to_timestamp_tz()。

有关日期/时间格式的更多信息,请参阅此处: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34924

希望有所帮助....

答案 1 :(得分:2)

我正在回答我自己的问题,因为我现在已经成功解决了这个问题。但不是通过使用所有不同的自定义函数,而是更好地使用MyBatis函数与动态SQL。在我尝试查找所有记录的当天00:00:00和23:59:59之间在我的SQL上使用MyBatis中的“between”函数,效果更好并检索所需的所有记录,而无需任何数据库特定功能。

感谢大家的帮助和建议。