【问题标题】:Retrieve only hour from Timestamp field stored in DB从存储在数据库中的时间戳字段中仅检索小时
【发布时间】:2015-12-27 02:01:51
【问题描述】:

我有一张包含不同字段的表格。有些是字符串,有些是 DB 中的 Timestamp(6)。 问题是当我显示此表中的数据时,我得到了时间戳字段:

15/12/10 00:03:00,000000000

我想像这样只存储和显示小时:

00:03:00

没有别的了。 我通过 java 中的 web 方法从数据库中检索数据。我正在使用带有 DAO 模式的 Hibernate。

我必须做哪些改变? 有一种方法可以只提取小时吗?

谢谢!

【问题讨论】:

    标签: java database oracle timestamp


    【解决方案1】:

    使用EXTRACT() 函数。

    例如,

    SELECT EXTRACT(HOUR FROM SYSDATE) FROM DUAL;
    

    【讨论】:

    • 我需要在Java端制作。
    【解决方案2】:
    SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP) || ':' ||EXTRACT(MINUTE FROM CURRENT_TIMESTAMP)|| ':' ||EXTRACT(SECOND FROM CURRENT_TIMESTAMP) FROM Demo;
    

    to_char(cast(SYSDATE as date),'hh24:mi:ss')
    

    【讨论】:

    • 我需要在Java端制作。
    【解决方案3】:

    在SQL中你可以使用SQL端的to_char(...)函数,它会直接返回小时

    SELECT to_char(t.my_date, 'hh24') FROM mytable t;
    

    如果您不想使用它,可以在 Java 端使用 Calendar。在这个最小的工作示例中,您从表中查询数据并从时间戳中提取小时。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Timestamp;
    import java.util.Calendar;
    
    public final class StackOverFlowExmaple {
    
        public static void main(String[] args) throws SQLException {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
            } catch (ClassNotFoundException e1) {
                System.out.println("registering oracle.jdbc.driver.OracleDriver did not work");
            }
    
            final String dbUser = "", dbPasswd = "", dbHost = "", dbPort = "", dbSid = "";
            final String connectionString = "jdbc:oracle:thin:" + dbUser + "/" + dbPasswd + "@//" + dbHost + ":" + dbPort + "/" + dbSid;
    
            final Connection connection = DriverManager.getConnection(connectionString);
            final Statement stmt = connection.createStatement();
    
            final ResultSet resultset = stmt.executeQuery("SELECT t.my_timestamp FROM my_table t;");
    
            while (resultset.next()) {
                final Timestamp tStamp = resultset.getTimestamp(0);
                final long time = tStamp.getTime();
                final Calendar cal = Calendar.getInstance();
    
                cal.setTimeInMillis(time);
                int hour = cal.get(Calendar.HOUR_OF_DAY);
                System.out.println("hour: " + hour);
            }
    
            connection.close();
        }
    }
    

    【讨论】:

    • 我需要在 Java 端制作它。根据数据库中的时间戳字段,我有一个带有日期字段的类,所以我真的不知道如何使用您为 java 编写的内容。
    • 我现在把我的帖子改成了一个最小的工作示例,我希望你现在知道从哪里开始 :-)
    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2017-02-02
    • 2014-12-30
    • 1970-01-01
    相关资源
    最近更新 更多