收到错误:ORA-01843:不是有效的月份]错误,不知道为什么



使用SQLdeveloper,我可以毫无问题地运行此查询:

update offer set startdate = '2019-10-01' where OFFER_ID =17160668

但当我尝试使用js脚本时,我会得到一个"[Error: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);
}
}
}
}

值得一提的是,我可以进行其他不涉及日期的更新。以及基本上任何其他查询。但不知怎么的,日期的格式给了我这个错误。

你知道发生了什么吗?

/Ivan

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'(传递日期,这样你就不会再遇到这种问题了。

或者,您可以使用Oracleto_date()函数并传递日期格式掩码,但坦率地说,日期文字更简单、更清晰。

最新更新