【问题标题】:How to convert Oracle "TIME" to JDBC Time in query?如何在查询中将 Oracle "TIME" 转换为 JDBC Time?
【发布时间】:2009-08-12 07:07:37
【问题描述】:

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()。但是我怎样才能在通用查询中获得时间呢?有没有办法转换结果?

【问题讨论】:

    标签: sql oracle date jdbc time


    【解决方案1】:

    Oracle 没有“时间”数据类型。它有一个 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 的结果将是一个 java.sql.Time 值,其中包含 16:31:59 的值。请记住将日期部分保持为某个恒定值(如上面的 1970-01-01),以便在 where 子句中使用 Time 的查询能够正常工作。

    【讨论】:

    • 谢谢。出于某种原因,当我只在 TO_DATE() 中指定时间时,我希望 Oracle 工程师使用固定的日期部分。
    【解决方案2】:

    DATE 类型存储为小数值——日期作为整数部分,一天中的时间作为小数部分。因此,每个 DATE 都有时间,您可以使用类似的方法提取时间。

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

    【讨论】:

      【解决方案3】:

      如果我明白了,您可以使用字符串时间值:

      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);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-20
        • 1970-01-01
        • 2023-03-17
        • 2021-12-03
        • 2017-09-17
        • 2023-03-25
        • 1970-01-01
        相关资源
        最近更新 更多