我有一个使用日期的查询 我和oracle一起工作
但我的日期格式有问题
当我运行查询时出现错误
这是我的查询测试:
select NUM_REQUEST,
from REQUEST_TEST
where REQUEST_DATE between TO_DATE('Thu Nov 07 00:00:00 CET 2013','MM/dd/yyyy hh:mm:ss a') and TO_DATE('Mon Dec 23 00:00:00 CET 2013','MM/dd/yyyy hh:mm:ss a'))
我使用to_date函数
时出现错误当我尝试使用此查询时,我得到了正确的结果
select NUM_REQUEST,
from REQUEST_TEST
where REQUEST_DATE between to_timestamp_tz('Thu Nov 07 00:00:00 CET 2013','Dy Mon dd hh24:mi:ss TZR yyyy') and to_timestamp_tz('Mon Dec 23 00:00:00 CET 2013','Dy Mon dd hh24:mi:ss TZR yyyy'))
但是当我在我的应用程序中测试时:
String sqlQuery = "select NUM_REQUEST, from REQUEST_TEST" +
" where REQUEST_DATE between to_timestamp_tz('Thu Nov 07 00:00:00 CET 2013','Dy Mon dd hh24:mi:ss TZR yyyy') and to_timestamp_tz('Mon Dec 23 00:00:00 CET 2013','Dy Mon dd hh24:mi:ss TZR yyyy')) ";
Query query = this.getSession().createSQLQuery(sqlQuery);
我有这个错误:
ORA-01846: ce n'est pas un jour de semaine valide
org.hibernate.exception.DataException: could not execute query
例如,我的专栏 REQUEST_DATE 此数据 29-NOV-13 ,当我编辑此专栏时,我的格式为例如:周五, 29 Novembre 2013 00:00:00 CET
答案 0 :(得分:2)
正如其他人所说,您的日期格式必须与您的日期字符串匹配。查看所有可能元素的Oracle Datetime Format Elements。 此外,由于您的字符串中有时区,因此需要将其强制转换为timestamp datatype and not date。因此,您需要使用TO_TIMESTAMP_TZ函数。
所以,回答你的问题应该是这样的。
to_timestamp_tz('Thu Nov 07 00:00:00 CET 2013','Dy Mon dd hh24:mi:ss TZR yyyy')
看起来您的语言设置是法语。所以你需要相应地提供月/日。
to_timestamp_tz('Jeu. Nov. 07 00:00:00 CET 2013','Dy Mon dd hh24:mi:ss TZR yyyy')
或者您应该明确地将语言更改为英语,您可以在函数调用中执行此操作。
to_timestamp_tz('Thu Nov 07 00:00:00 CET 2013',
'Dy Mon dd hh24:mi:ss TZR yyyy',
'nls_date_language = ENGLISH')
答案 1 :(得分:0)
我能想到的最接近的是:
select NUM_REQUEST,
from REQUEST_TEST
where REQUEST_DATE Between TO_TIMESTAMP_TZ('Thu Nov 07 00:00:00 CET 2013','DY MON DD HH24:MI:SS TZR YYYY' ) And TO_TIMESTAMP_TZ('Mon Dec 23 00:00:00 CET 2013','DY MON DD HH24:MI:SS TZR YYYY')
请注意month abbreviations
,因为它们取决于您的区域设置语言设置。例如,12月的英语为Dec
,西班牙语为Dic
。
更新:ORA-01846的问题与您的语言环境语言设置有关。您需要使用与您的语言相对应的缩写。例如,我想对法语来说,Friday
(法语为Vendredi
)的缩写为Ven
。
答案 2 :(得分:0)
可能你需要这个。我相信你从UNIX获得这种日期格式。 您也可以尝试从Unix格式化日期。
select to_timestamp_tz('Thu Nov 07 00:00:00 EDT 2013','Dy Mon DD HH24:MI:SS TZD YYYY') from dual;