Java 甲骨文日期
我在数据库表中有字段类型DATE 我需要按日期范围选择信息:Java 甲骨文日期,java,oracle,Java,Oracle,我在数据库表中有字段类型DATE 我需要按日期范围选择信息: select to_char(log_hour, ' DD/MM/YY HH24') from log_hourly_page page_counts where to_char(log_hour, 'DD/MM/YY') = '25/06/13' order by log_hour desc; 我得到了正确的结果(每小时有许多记录) 但是当我跑的时候 select to_char(log_hour, ' DD/MM/Y
select to_char(log_hour, ' DD/MM/YY HH24') from log_hourly_page page_counts where to_char(log_hour, 'DD/MM/YY') = '25/06/13' order by log_hour desc;
我得到了正确的结果(每小时有许多记录)
但是当我跑的时候
select to_char(log_hour, ' DD/MM/YY HH24') from log_hourly_page page_counts where log_hour = '25-Jun-2013' order by log_hour desc;
我总是得到0作为我的时间
25/06/13 00
25/06/13 00
25/06/13 00
25/06/13 00
.............
25/06/13 00
25/06/13 00
25/06/13 00
为什么第二个查询是这样工作的?我正在测试这个查询,因为我将Java.util.Date对象作为日期传递,它返回了错误的数据,总是00小时。在Oracle中,有一个以这种方式指定的日期的时间组件:
'25-Jun-2013'
时间成分是0(午夜),小时是0,所以你只能从特定的时间点得到匹配,而不是从一整天
要获得全天的活动范围,请使用您已有的:
where to_char(log_hour, 'DD/MM/YY') = '25/06/13'
或使用范围:
where log_hour >= '25/06/13' and log_hour < '26/06/13'
它传递一个没有时间组件的SQL日期
query.setTimestamp("date", timestamp);
您希望使用,它将SQL时间戳传递给数据库,该数据库具有时间组件和日期组件
query.setTimestamp("date", timestamp);
Oracle中有一个以这种方式指定的日期的时间组件:
'25-Jun-2013'
时间成分是0(午夜),小时是0,所以你只能从特定的时间点得到匹配,而不是从一整天
要获得全天的活动范围,请使用您已有的:
where to_char(log_hour, 'DD/MM/YY') = '25/06/13'
或使用范围:
where log_hour >= '25/06/13' and log_hour < '26/06/13'
它传递一个没有时间组件的SQL日期
query.setTimestamp("date", timestamp);
您希望使用,它将SQL时间戳传递给数据库,该数据库具有时间组件和日期组件
query.setTimestamp("date", timestamp);
如果您在
log\u hour
上有一个索引,Oracle将优化查询,除非您对其应用类似的函数
另外,我建议使用ANSI日期语法,因为它总是有效的。您的where log_hour='25-Jun-2013'
取决于Oracle的日期格式设置,在大多数安装中是DD-MON-RR
,但它可以更改。如果您尝试'25-Jun-2013'
,而Oracle使用的是不同的格式,则查询将失败
select to_char(log_hour, ' DD/MM/YY HH24')
from log_hourly_page page_counts
where log_hour >= DATE '2013-06-25' AND log_hour < DATE '2013-06-26'
order by log_hour desc;
选择字符(记录时间,'DD/MM/YY HH24')
从日志\每小时\页面\页面\计数
其中log_hour>=日期“2013-06-25”和log_hour<日期“2013-06-26”
按日志小时描述订购;
如果您在log\u hour
上有索引,Oracle将优化查询,除非您对其应用类似的函数
另外,我建议使用ANSI日期语法,因为它总是有效的。您的where log_hour='25-Jun-2013'
取决于Oracle的日期格式设置,在大多数安装中是DD-MON-RR
,但它可以更改。如果您尝试'25-Jun-2013'
,而Oracle使用的是不同的格式,则查询将失败
select to_char(log_hour, ' DD/MM/YY HH24')
from log_hourly_page page_counts
where log_hour >= DATE '2013-06-25' AND log_hour < DATE '2013-06-26'
order by log_hour desc;
选择字符(记录时间,'DD/MM/YY HH24')
从日志\每小时\页面\页面\计数
其中log_hour>=日期“2013-06-25”和log_hour<日期“2013-06-26”
按日志小时描述订购;
我的解决方案是
private DateTimeFormatter processHourFormat = new DateTimeFormatterBuilder().appendMonthOfYear(2)
.appendLiteral('/')
.appendDayOfMonth(2)
.appendLiteral('/')
.appendYear(4, 4)
.toFormatter();
private SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
DateTime dateTimeFrom = DateTime.parse(dateFormat.format(proxyParams.getFromDate()), processHourFormat).withHourOfDay(00);
DateTime dateTimeTo = DateTime.parse(dateFormat.format(proxyParams.getToDate()), processHourFormat).withHourOfDay(23);
query.setTimestamp("fromDate", dateTimeFrom.toDate());
query.setTimestamp("toDate", dateTimeTo.toDate());
谢谢大家的帮助。我的解决方案是
private DateTimeFormatter processHourFormat = new DateTimeFormatterBuilder().appendMonthOfYear(2)
.appendLiteral('/')
.appendDayOfMonth(2)
.appendLiteral('/')
.appendYear(4, 4)
.toFormatter();
private SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
DateTime dateTimeFrom = DateTime.parse(dateFormat.format(proxyParams.getFromDate()), processHourFormat).withHourOfDay(00);
DateTime dateTimeTo = DateTime.parse(dateFormat.format(proxyParams.getToDate()), processHourFormat).withHourOfDay(23);
query.setTimestamp("fromDate", dateTimeFrom.toDate());
query.setTimestamp("toDate", dateTimeTo.toDate());
谢谢大家的帮助。在SELECT语句中检索DATE
字段作为日期,然后在Java代码中使用ResultSet#getTimestamp(1)
并将其与java.util.Date
字段相关联。Luiggi Mendoza-我没有真正理解您的解决方案在SELECT语句中检索Date
字段作为日期,然后在java代码中使用ResultSet 35; getTimestamp(1)
并将其与java.util.Date
字段相关联。Luiggi Mendoza-我不太理解您的解决方案,无法在java端对其进行调整,现在我只是将java.util.Date作为参数-query.setDate(“Date”,Date)传递;date有类型date,我总是得到00。似乎同样的问题如果使用范围我总是增加DatePickerHanks的传入数据,以便在这里提供实际的Java代码;我以前看到的只是你的SQL。是的,对不起,我以前没有提到过。我仍然有同样的问题,query.setTimestamp(“fromDate”,proxyParams.getFromDate())之后的结果中只有00;与query.setDate(“fromDate”,proxyParams.getFromDate())相同;。proxyParams.getFromDate()-日期类型,分配值作为post请求提供,2013年6月24日proxyParams.getFromDate()的时间值部分是什么?它仍将尝试匹配确切的日期和时间。无论如何,要在Java端对其进行调整,现在我只需将Java.util.date作为参数-query.setDate(“date”,date)传递;date有类型date,我总是得到00。似乎同样的问题如果使用范围我总是增加DatePickerHanks的传入数据,以便在这里提供实际的Java代码;我以前看到的只是你的SQL。是的,对不起,我以前没有提到过。我仍然有同样的问题,query.setTimestamp(“fromDate”,proxyParams.getFromDate())之后的结果中只有00;与query.setDate(“fromDate”,proxyParams.getFromDate())相同;。proxyParams.getFromDate()-日期类型,分配值作为post请求提供,2013年6月24日proxyParams.getFromDate()的时间值部分是什么?它仍将尝试匹配确切的日期和时间。