插入时间戳值时不是有效的月份错误'2021-08-31T16:30:01.850'



插入时间戳值"2021-08-31T16:30:01.850"时出错

INSERT INTO tbl_Account_Master (Account_ID, Verified_Date) 
VALUES (1, '2021-08-31T16:30:01.850')

表格定义:

CREATE TABLE tbl_Account_Master 
(
Account_ID Number(10) NOT NULL,
Verified_Date Timestamp(3) NULL 
)

错误:

ORA-01843:不是有效的月份

感谢

处理日期和时间戳时不要使用字符串。
'2021-08-31T16:30:01.850'

是一个字符串。它包含一个时间戳格式,我记得我在SQL Server中见过它。

以下是标准SQL和Oracle中的有效时间戳文字:

timestamp '2021-08-31 16:30:01.850'

因此:

INSERT INTO tbl_Account_Master (Account_ID, Verified_Date) 
VALUES (1, TIMESTAMP '2021-08-31 16:30:01.850')

我有一个只有'2021-08-31T16:30:01.850'值的数据脚本

使用TO_TIMESTAMP显式地从字符串转换为TIMESTAMP数据类型:

INSERT INTO tbl_Account_Master (Account_ID, Verified_Date) 
VALUES (1, TO_TIMESTAMP('2021-08-31T16:30:01.850', 'YYYY-MM-DD"T"HH24:MI:SS.FF3'));

您也可以使用隐式转换(但这不是最佳实践(并更改NLS_TIMESTAMP_FORMAT会话参数,Oracle将隐式使用该参数作为从字符串转换为TIMESTAMP的格式模型(当没有给出显式格式模型时(。

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3';

或者,如果你想让分数秒的精度不明确:

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF';

然后您的INSERT查询将工作(至少直到NLS_TIMESTAMP_FORMAT会话参数更改为其他参数,然后您的查询将再次中断…这就是为什么依赖隐式设置转换格式不是最佳做法的原因(。

db<gt;小提琴这里

相关内容

最新更新