Sql 我们可以从只存储日期而不存储时间的日期列中提取时间吗?

Sql 我们可以从只存储日期而不存储时间的日期列中提取时间吗?,sql,oracle,date,oracle12c,Sql,Oracle,Date,Oracle12c,我有一个带有列date(datecreated)和示例数据2.10.2017的表 所以我想知道插入数据的时间,但我只存储日期而不是时间。 我可以提取时间吗?Oracle中的日期类型也包括小时、分钟等。因此,除非插入时将其截断,否则它将被存储。但在默认设置中,一些客户端不显示它们 试一试 获取年、月、日、小时、分钟和秒的时间。Oracle中的日期类型也包括小时、分钟等。因此,除非在插入时截断,否则它将被存储。但在默认设置中,一些客户端不显示它们 试一试 要获取年、月、日、小时、分钟和秒的时间,时间

我有一个带有列date(datecreated)和示例数据2.10.2017的表 所以我想知道插入数据的时间,但我只存储日期而不是时间。
我可以提取时间吗?

Oracle中的日期类型也包括小时、分钟等。因此,除非插入时将其截断,否则它将被存储。但在默认设置中,一些客户端不显示它们

试一试


获取年、月、日、小时、分钟和秒的时间。Oracle中的日期类型也包括小时、分钟等。因此,除非在插入时截断,否则它将被存储。但在默认设置中,一些客户端不显示它们

试一试


要获取年、月、日、小时、分钟和秒的时间,时间组件肯定在那里,您可以使用to_CHAR查看它:

SELECT TO_CHAR(DATECREATED, 'DD-MON-YYYY HH24:MI:SS')
  FROM YOUR_TABLE;
但是,如果未设置创建记录的时间,则小时、分钟和秒字段都应为零。换句话说,如果你做了类似的事情

INSERT INTO YOUR_TABLE (DATECREATED) VALUES (TO_DATE('09-OCT-2010', 'DD-MON-YYYY'));
日期的时间成分将为零


时间组件肯定在那里,您可以通过使用TO_CHAR来查看它:

SELECT TO_CHAR(DATECREATED, 'DD-MON-YYYY HH24:MI:SS')
  FROM YOUR_TABLE;
但是,如果未设置创建记录的时间,则小时、分钟和秒字段都应为零。换句话说,如果你做了类似的事情

INSERT INTO YOUR_TABLE (DATECREATED) VALUES (TO_DATE('09-OCT-2010', 'DD-MON-YYYY'));
日期的时间成分将为零


这是一个常见的误解-日期数据类型始终包含年(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;
然后:

产出:

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
(或类似工具)插入日期,则它将具有非零时间组件,并且时间组件不会显示在您的用户界面上,您可以使用
来,等,以覆盖用户界面的默认日期格式并获取信息。

这是一个常见的误解-日期总是包含年(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;
然后:

产出:

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
(或类似)插入日期,则它将具有非零时间组件,并且时间组件不会显示在您的用户界面上。您可以使用
to_CHAR
等来覆盖用户界面的默认日期格式并获取信息。

使用
trunc(datecreated)
。使用
trunc(datecreated)