插入时间戳值"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;小提琴这里