gpt4 book ai didi

c - 在 pro *C 中用早 1 分钟的时间更新日期时间字段

转载 作者:太空宇宙 更新时间:2023-11-04 02:52:12 25 4
gpt4 key购买 nike

我们使用 Oracle 数据库在 pro *C 中实现了以下查询,它工作正常。

update anp
set lssn = :ssn,
ltd = :td;

这里 ltd 是一个日期时间字段,td 是一个日期时间变量。现在我们希望以这样的方式实现此查询,即 ltd 的更新时间比 td 少 1 分钟。例子:如果 td 的值为 2014-01-02 14:44:03,ltd 应更新为 2014-01-02 14:43:03

我试过很多东西,比如:

update anp
set lssn = :ssn,
ltd = :td -(1/1440);

update anp
set lssn = :ssn,
ltd = :td + interval '-60' second;

还有很多事情,但我没能实现。请帮助我。

最佳答案

看起来 td 是日期的字符串表示,所以 dtime_t 似乎是一个结构 - 可能是 VARCHAR。如果是这样,您目前正在进行隐式日期转换,这无论如何都不是一个好主意,因为它依赖于客户端应用程序的 NLS 设置;在 Pro*C 应用程序中可能比在其他情况下更多地控制它们,但仍然是潜在的故障点。但是在这种情况下,您试图在隐式转换发生之前从 string 中减去间隔;因此出现 ORA-30081 错误。

将其更改为显式转换将允许区间运算:

update anp
set lssn = :ssn,
ltd = to_date(:td, 'YYYY-MM-DD HH24:MI:SS') - interval '1' minute;

一个简单的演示:

select '2014-01-02 14:44:03' - interval '1' minute from dual;

SQL Error: ORA-30081: invalid data type for datetime/interval arithmetic
30081. 00000 - "invalid data type for datetime/interval arithmetic"
*Cause: The data types of the operands are not valid for datetime/interval
arithmetic.

对比:

select to_date('2014-01-02 14:44:03', 'YYYY-MM-DD HH24:MI:SS')
- interval '1' minute from dual;

TO_DATE('2014-01-0214:44:03','YYYY-MM-DDHH24:MI:SS')-INTERVAL'1'MINUTE
----------------------------------------------------------------------
2014-01-02 14:43:03

关于c - 在 pro *C 中用早 1 分钟的时间更新日期时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com