我有一个包含不同字段的表。有些是String,其他是DB中的Timestamp(6)。 问题是当我从这个表中显示数据时,我得到了Timestamp字段:
15/12/10 00:03:00,000000000
我想存储和显示这样的小时:
00:03:00
没有别的。 我通过java中的web方法从DB中检索数据。我正在使用带有DAO模式的Hibernate。
我必须做些什么改变? 有一种方法可以只提取小时?
谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP) || ':' ||EXTRACT(MINUTE FROM CURRENT_TIMESTAMP)|| ':' ||EXTRACT(SECOND FROM CURRENT_TIMESTAMP) FROM Demo;
OR
to_char(cast(SYSDATE as date),'hh24:mi:ss')
答案 2 :(得分:0)
在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();
}
}