将存储在varchar2列中的时间戳记值存储到oracle中的date列中

时间:2018-09-01 07:45:38

标签: oracle

我在表中有一列将时间戳记值存储为 “ 2018-01-12 16:13:51.107000000”,我需要将此列插入另一个表的日期列中,我必须在此处使用哪种格式的掩码。

我使用了掩码“ YYYY-MM-DD HH24:MI:SS.FF”,但显示“无法识别日期格式”。

2 个答案:

答案 0 :(得分:1)

我假设您正在尝试在文本时间戳记数据上使用TO_DATE。这是行不通的,因为Oracle日期不能存储比秒更精确的日期。由于您的时间戳记有小数秒,因此您可以在此处使用TO_TIMESTAMP,然后将实际时间戳记转换为日期:

SELECT
    CAST(TO_TIMESTAMP('2018-01-12 16:13:51.100000',
                      'YYYY-MM-DD HH24:MI:SS.FF') AS DATE)
FROM dual;

12.01.2018 16:13:51

Demo

答案 1 :(得分:0)

可以通过一次调用TO_DATE()来执行此操作,但是您必须提供正确的格式模型。请注意,此解决方案比转换为时间戳然后转换为日期更简单(如果可能的话,可能更快)。

如果要TO_DATE()忽略输入字符串的一部分,则可以在格式模型中使用“样板文字”语法。括在双引号中。例如,如果您的字符串在某处包含字母T,并且必须将其忽略,则可以在格式模型的同一位置包含“ T”。

这具有一定的灵活性。在您的情况下,您必须忽略小数点和最多9个十进制数字(Oracle中时间戳的最大值)。格式模型将允许您使用“ .999999999”(或任何其他数字,但大多数程序员使用9999 ...)来忽略小数点,之后最多9个数字。

演示 :(请注意格式模型中双引号的“样板文字”)

select to_date('2018-01-12 16:13:51.100000', 
               'YYYY-MM-DD HH24:MI:SS".999999999"') as dt
from   dual;

DT                 
-------------------
2018-01-12 16:13:51