我试图在Oracle中插入时间戳值,但下面的查询失败。请提出相同的修复方法。我试着添加“时间戳”,但没有成功。
insert into table (name, created_date) values ('test', '2023-04-24T11:11:11.807Z');
这是我得到的例外:
SQL Error: ORA-01861: literal does not match format string
01861. 00000 - "literal does not match format string"
*Cause: Literals in the input must be the same length as literals in
the format string (with the exception of leading whitespace). If the
"FX" modifier has been toggled on, the literal must match exactly,
with no extra whitespace.
*Action: Correct the format string to match the literal.
3条答案
按热度按时间4sup72z81#
'2023-04-24T11:11:11.807Z'
不是TIMESTAMP
数据类型,它是一个字符串文字(碰巧看起来像时间戳)。Oracle将尝试提供帮助,并将字符串转换为适当的数据类型,这涉及到从字符串到
TIMESTAMP
(或TIMESTAMP WITH TIME ZONE
)的隐式转换,您的查询有效地:但是,如果
NLS_TIMESTAMP_FORMAT
(或NLS_TIMESTAMP_TZ_FORMAT
)会话参数与字符串的格式不匹配,则会出现异常。你需要做的是:
1.使用
TIMESTAMP
文字:1.如果要插入
TIMESTAMP
,请将TO_TIMESTAMP
与显式格式模型一起使用:1.如果要插入
TIMESTAMP WITH TIME ZONE
,请将TO_TIMESTAMP_TZ
与显式格式模型一起使用:fiddle
yjghlzjz2#
不插入字符串;如果您NLS设置与您使用的格式模型匹配,则它 * 可能 * 起作用,但是-如果它们不匹配,则以不同的方式执行。例如,使用
to_timestamp
函数:另一方面,
created_date
建议此列应该在插入或更新时获得其值,因此您可能宁愿插入systimestamp
:sg2wtvxw3#
使用转换函数to_timestamp和适当的格式掩码参见 www.example.com
而且,通常,当你必须进行一些转换时(如从char到date或timestamp),使用转换函数以避免隐式转换。