Sql Oracle强制转换(时间戳为日期)
我在甲骨文中看到了不一致之处。 将时间戳数据类型值插入日期数据类型列的方式与CAST(时间戳为日期)的工作方式不一致 INSERT似乎只是在CAST将时间戳值舍入到最接近的秒数时,将时间戳值中的毫秒数切掉 例如:Sql Oracle强制转换(时间戳为日期),sql,oracle,timestamp,Sql,Oracle,Timestamp,我在甲骨文中看到了不一致之处。 将时间戳数据类型值插入日期数据类型列的方式与CAST(时间戳为日期)的工作方式不一致 INSERT似乎只是在CAST将时间戳值舍入到最接近的秒数时,将时间戳值中的毫秒数切掉 例如: 临时表 create table test_timestamp_to_date (date_col date, timestamp_col timestamp(6)); 插入: insert into test_timestamp_to_date select to_times
create table test_timestamp_to_date
(date_col date, timestamp_col timestamp(6));
insert into test_timestamp_to_date select
to_timestamp('11-OCT-2009 2:23:23.793915 PM'),
to_timestamp('11-OCT-2009 2:23:23.793915 PM')
from dual;
insert into test_timestamp_to_date select
cast(to_timestamp('11-OCT-2009 2:23:23.793915 PM') as date),
to_timestamp('11-OCT-2009 2:23:23.793915 PM')
from dual;
1* select to_char(date_col,'DD-MON-YYYY HH24:MI:SS') date_col, timestamp_col
from test_timestamp_to_date
SQL> /
DATE_COL TIMESTAMP_COL
-------------------- ----------------------------
11-OCT-2009 14:23:23 11-OCT-09 02.23.23.793915 PM
11-OCT-2009 14:23:24 11-OCT-09 02.23.23.793915 PM
谢谢。谢谢您的回复。不过,日期数据类型显然没有小数秒。我想我的问题是,是否有人知道为什么ORACLE在“默认情况下”(插入到日期选择时间戳)时,从时间戳到日期的转换会有所不同,在这种转换中,分数被简单地删除(即使毫秒是0.999999),而在CAST函数中分数被舍入到下一秒(如果毫秒超过0.5秒)或前一秒(如果毫秒小于0.5秒)。抱歉,如果我不清楚这个问题。谢谢。我还想知道是否有人知道在使用CAST时避免这种舍入的简单方法。谢谢你的回答。但是,很明显,日期数据类型没有小数秒。我想我的问题是,是否有人知道ORACLE为什么要从时间进行转换“默认情况下”(插入日期选择时间戳)时,标记日期的方式不同,此时只需删除分数(即使毫秒为0.999999),而CAST函数中分数四舍五入到下一秒(如果毫秒超过0.5秒)或前一秒(如果毫秒小于0.5秒)。如果我不清楚这个问题,很抱歉。谢谢。我还想知道是否有人知道在使用“谢谢”时避免这种舍入的简单方法。