插入精度为systimestamp 9

时间:2018-08-02 19:36:15

标签: sql oracle oracle11g

我正在尝试使用systimestamp在instert上以全9精度填充一个Oracle时间戳(9)

column MY_TS format 99999999999999999999999999

SElECT TO_NUMBER(TO_CHAR(systimestamp, 'YYYYMMDDHH24MISSSSSFF'), '99999999999999999999999999') as MY_TS FROM DUAL;

CREATE TABLE T1 (MY_TS timestamp(9));
INSERT INTO T1 VALUES(systimestamp);
SELECT TO_NUMBER(TO_CHAR(MY_TS, 'YYYYMMDDHH24MISSSSSFF'), '99999999999999999999999999') as MY_TS FROM T1;

产量

                      MY_TS
---------------------------
    20180802152155270705139


Table created.


1 row created.


                      MY_TS
---------------------------
 20180802152155270735103000

似乎丢失了最后3位精度。

我一直在阅读,Oracle systimestamp的默认值为6,但是可以修改。但是我似乎无法进入一个页面说明该如何完成(大多数都与价值形成有关)。

1 个答案:

答案 0 :(得分:3)

  

似乎丢失了最后3位精度。

它不会丢失最后3位数字的精度; FF格式模型正在显示default precision of the data type

FF [1..9]
     

分数秒;不打印任何基数字符(使用X格式元素添加基数字符)。在FF后使用数字1到9来指定返回的datetime值的小数秒部分的位数。 如果不指定数字,则Oracle数据库将使用为datetime数据类型指定的精度或数据类型的默认精度。

SELECT TO_CHAR(systimestamp, 'YYYYMMDDHH24MISSFF') as MY_TS FROM DUAL
UNION ALL
SELECT 'YYYYMMDDHHMMSSFFFFFFFFF' FROM DUAL;

输出:

MY_TS                 
-----------------------
20180802230042489334   
YYYYMMDDHHMMSSFFFFFFFFF

因此,它仅输出小数秒至微秒精度,即the default precision

TIMESTAMP [(fractional_seconds_precision)]
     

日期的年,月,日值以及时间的小时,分​​钟和秒值,其中 fractional_seconds_precision 是小数部分中的位数。第二日期时间字段。 fractional_seconds_precision 的可接受值为0到9。默认值为6 。默认格式由NLS_DATE_FORMAT参数显式确定,或由NLS_TERRITORY参数隐式确定。大小从7到11个字节不等,具体取决于精度。此数据类型包含日期时间字段YEARMONTHDAYHOURMINUTESECOND。它包含小数秒,但没有时区。

如果您更改时间戳的精度:

SELECT TO_CHAR(systimestamp(9), 'YYYYMMDDHH24MISSFF') as MY_TS FROM DUAL
UNION ALL
SELECT 'YYYYMMDDHHMMSSFFFFFFFFF' FROM DUAL;

输出:

MY_TS                 
-----------------------
20180802230708135745000
YYYYMMDDHHMMSSFFFFFFFFF

哪一个给出的TIMESTAMP精度为9位数字。

您还可以使用FF9格式模型(而不是仅使用数据类型的默认精度的FF)在输出格式中指定精度:

SELECT TO_CHAR(systimestamp, 'YYYYMMDDHH24MISSFF9') as MY_TS FROM DUAL
UNION ALL
SELECT 'YYYYMMDDHHMMSSFFFFFFFFF' FROM DUAL;

输出:

MY_TS                 
-----------------------
20180802230936652602000
YYYYMMDDHHMMSSFFFFFFFFF