如何在查询中将Oracle“TIME”转换为JDBC时间?

时间:2009-08-12 07:07:38

标签: sql oracle date jdbc time

Oracle不支持TIME数据类型,但您可以使用DATE存储TIME。

我的问题:

select to_date('2009-06-30', 'YYYY-MM-DD') as "DATE",
       to_date('16:31:59', 'HH24:MI:SS') as "TIME"
from dual

的产率:

DATE        TIME
2009-06-30  2009-08-01

当我通过JDBC运行时(实际上是在SQuirrel SQL中)。 “2009-08-01”不是一个非常有用的时间。在我的代码中,我可以使用ResultSet.getTime()。但是,如何在通用查询中获得时间?有没有办法投出结果?

3 个答案:

答案 0 :(得分:1)

Oracle没有“Time”数据类型。它有一个DATE,它是第二个精确的日期和时间。它还具有更高精度的时间戳。

当你执行to_date()调用时,你会回来......日期!根据您建立NLS设置的方式,您可以根据需要显示该日期的文本。 NLS设置控制日期格式,时间戳格式,货币字符,小数分隔符等。显然,您的NLS设置被定义为将DATE数据显示为yyyy-mm-dd。

如果您尝试使用Oracle DATE执行通用JDBC操作,则需要为日期的“日期”部分指定“静态”值,然后指定时间。考虑这个例子:

String sql = "Select to_date('1970-01-01 ' || ? ,'YYYY-MM-DD HH24:MI:SS) as MY_TIME from dual";
Connection conn = null; //get Connection from somewhere
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, "16:31:59");
ResultSet rs = stmt.executeQuery();
rs.next(); //get to first element of result set;
java.sql.Time myTime = rs.getTime(1);

myTime的结果将是包含16:31:59值的java.sql.Time值。请记住将日期部分保持为常量值(如上面的1970-01-01),以便在where子句中使用Time的查询将正常工作。

答案 1 :(得分:0)

DATE类型存储为小数值 - 日期作为整数部分,时间作为小数部分。所以,每个DATE都有时间,你可以用这样的东西提取。

select TO_CHAR(sysdate, 'DD-MON-YYYY HH24:MI:SS') from dual;

答案 2 :(得分:0)

如果我得到了这一点,你可以使用字符串时间值:

select to_date('2009-06-30', 'YYYY-MM-DD') as "DATE",
       '16:31:59' as "TIME"
from dual;

String time_str =  ResultSet.getString("Time");
java.sql.Time jsqlT = java.sql.Time.valueOf( time_str);

它应该产生你需要的结果。