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



我知道Oracle sysdate返回当前日期和时间。这对于时间戳或日期时间列非常有用。

现在假设我有一个仅限日期的列。我应该在插入查询中使用哪些关键字?

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

假设我有一个仅限时间的列。我应该在插入查询中使用哪些关键字?

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

谢谢!

要去掉sysdate的时间,可以直接写TRUNC(sysdate)

例如:

SELECT TRUNC(SYSDATE) "TODAY" FROM DUAL;

将给你:

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

在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> 

如果你认为你只需要一个时间列,你会想要确保你总是插入相同的日期组件。

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

对于正在寻找仅返回日期而不返回时间的简单解决方案的人来说,我发现了这个:

to_date(SYSDATE,'dd/mm/yyyy')

很有魅力。: -)

最新更新