使用to_date函数的日期格式

时间:2013-12-23 09:26:31

标签: sql oracle

我有一个使用日期的查询 我和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

3 个答案:

答案 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;