我有一个表,其中包含列date(创建日期)和示例数据2.10.2017 所以我想知道插入数据的时间,但是我只存储日期而不是时间。 我可以抽出时间吗?
答案 0 :(得分:2)
时间部分肯定存在,您可以使用TO_CHAR看到它:
SELECT TO_CHAR(DATECREATED, 'DD-MON-YYYY HH24:MI:SS')
FROM YOUR_TABLE;
但是,如果您没有设置创建记录的时间,则HOUR,MINUTE和SECOND字段都应为零。换句话说,如果您做了类似的事情
INSERT INTO YOUR_TABLE (DATECREATED) VALUES (TO_DATE('09-OCT-2010', 'DD-MON-YYYY'));
日期的时间部分将为零。
答案 1 :(得分:1)
Oracle中的date
类型还包括小时,分钟等。因此,除非在插入时将其截断,否则它将被存储。但是在默认设置下,某些客户端不显示它们。
尝试
SELECT to_char(datecreated, 'YYYY-MM-DD HH24:MI:SS')
FROM elbat;
获取年,月,日,时,分和秒。
答案 2 :(得分:1)
这是一个常见的误解-DATE
数据类型始终为stored in Oracle tables as 7 bytes,其中包含年(2个字节),月,日,小时,分钟和秒(每个1字节)。它永远不会只存储年/月/日部分。
但是,如果您没有向Oracle提供任何有关放入时间组件的信息,那么Oracle会将这些组件设置为默认值零。
因此,如果您这样做:
CREATE TABLE table_name ( value DATE );
INSERT INTO table_name
SELECT DATE '2018-01-01' FROM DUAL UNION ALL
SELECT CAST( TIMESTAMP '2018-10-04 08:20:14' AS DATE ) FROM DUAL;
然后:
SELECT TO_CHAR( value, 'YYYY-MM-DD"T"HH24:MI:SS' ) AS formatted,
DUMP( value ) AS dmp,
EXTRACT( HOUR FROM CAST( value AS TIMESTAMP ) ) As hr
FROM table_name;
输出:
FORMATTED DMP HR
------------------- ---------------------------------- --
2018-01-01T00:00:00 Typ=12 Len=7: 120,118,1,1,1,1,1 0
2018-10-04T08:20:14 Typ=12 Len=7: 120,118,10,4,9,21,15 8
表明时间成分在那里;您可以使用TO_CHAR
或EXTRACT
函数提取它们;如果您未指定值,则默认为零。
我只存储日期,不存储时间。我可以提取时间
否,如果您未指定时间,则Oracle将日期值的小时,分钟和秒默认为00:00:00
。
如果您使用SYSDATE
(或类似的名称)插入日期,则它将具有非零的时间成分,并且用户界面只是不显示时间成分,您可以使用{{1} }等以覆盖用户界面的默认日期格式并获取信息。