我在表中有一列将时间戳记值存储为 “ 2018-01-12 16:13:51.107000000”,我需要将此列插入另一个表的日期列中,我必须在此处使用哪种格式的掩码。
我使用了掩码“ YYYY-MM-DD HH24:MI:SS.FF”,但显示“无法识别日期格式”。
答案 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
答案 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