使用SQLdeveloper,我可以毫无问题地运行此查询:
update offer set startdate = '2019-10-01' where OFFER_ID =17160668
但是当我尝试使用js脚本执行操作时,会收到“ [错误:ORA-01843:无效的月份]”。
这是我运行的命令:
await run("update offer set startdate = '2019-10-01' where OFFER_ID = 17160668");
及其调用的运行功能
async function run(query) {
let connection;
const connectionString =*********;
try {
connection = await oracledb.getConnection({
user: *********,
password: *********,
connectString: connectionString
});
console.log(query);
let result = await connection.execute(query);
return result;
} catch (err) {
console.error(err);
} finally {
if (connection) {
try {
await connection.close();
} catch (err) {
console.error(err);
}
}
}
}
值得一提的是,我可以进行其他不涉及日期的更新。以及基本上任何其他查询。 但是以某种方式,日期的格式给了我这个错误。
有什么想法吗?
/伊万
答案 0 :(得分:3)
JS客户端的日期格式掩码与您在SQL Developer中使用的日期格式掩码不同。因此,SQL Developer可以正确解释'2019-10-01'
并将从字符串到日期的隐式数据转换应用为to_date('2019-10-01','yyyy-mm-dd')
。但是Javascript认为日期的格式为'mm-dd-yyyy'
(例如),因此很麻烦,因为2019年不是有效月份。
解决方案很简单:不要依赖隐式数据类型转换。这只是不好的做法。始终使用日期文字-date '2019-10-01'
-传递日期,您将再也不会遇到这个问题。
或者您可以使用Oracle to_date()
函数并传递日期格式掩码,但是坦率地说,日期文字更简单明了。