Oracle:与sysdate类似,但只返回时间和日期

时间:2011-09-29 22:36:26

标签: sql database oracle

我了解Oracle sysdate会返回当前的日期和时间。这对时间戳或日期时间列非常有用。

现在假设我有一个DATE专栏。我应该在插入查询中使用哪些关键字?

insert into myTable1(myDateOnlyColumn) values(???)

让我说我只有一个TIME专栏。我应该在插入查询中使用哪些关键字?

 insert into myTable2(myTimeOnlyColumn) values(???)

谢谢!

3 个答案:

答案 0 :(得分:14)

要从sysdate移除时间,您只需撰写TRUNC(sysdate)

例如:

SELECT TRUNC(SYSDATE) "TODAY" FROM DUAL;

会给你:

TODAY                     
------------------------- 
'2012-10-02 00:00:00'     

答案 1 :(得分:8)

Oracle中没有DATE only列。 DATE数据类型存储日期和时间。

如果你只关心日期,你可以:

INSERT INTO tbl (dtCol) VALUES (TO_DATE('20110929','YYYYMMDD');

这使得时间组件在00:00:00。你不必显示它。

如果您只对时间组件感兴趣,那么您仍然会在列中存储日期。你只需要在输出上处理它。例如:

SQL> CREATE TABLE dt (d DATE);

SQL> INSERT INTO dt VALUES (TO_DATE('1:164800','J:HH24MISS'));

1 row inserted

显示列的实际内容显示已插入日期:

SQL> SELECT * FROM dt;

D
--------------------
0/0/0000 4:48:00 PM

仅从列中选择时间组件可以获得所需的输出:

SQL> SELECT TO_CHAR(d, 'HH24:MI:SS') d FROM dt;

D
--------
16:48:00

SQL> 

如果您认为只需要一个时间列,则需要确保始终插入相同的日期组件。

答案 2 :(得分:0)

select sysdate, to_date(to_char(sysdate, 'dd/mm/yyyy'),'dd/mm/yyyy') d
from dual