更新 Oracle SQL 表中的日期

Posted

技术标签:

【中文标题】更新 Oracle SQL 表中的日期【英文标题】:Updating a date in Oracle SQL table 【发布时间】:2012-11-09 22:22:51 【问题描述】:

我正在尝试更新 SQL 表中的日期。我正在使用 Peoplesoft Oracle。当我运行这个查询时:

Select ASOFDATE from PASOFDATE;

我知道 2012 年 4 月 16 日

我尝试运行此查询

UPDATE PASOFDATE SET ASOFDATE = '11/21/2012';

但它不起作用。

有人知道如何将日期更改为所需的日期吗?

【问题讨论】:

定义Not Working... 错误信息?出乎意料的结果? 你可以试试:UPDATE PASOFDATE SET ASOFDATE = '11-21-2012'; 我想试试,但恐怕我无法将它改回带有斜线的日期... 日期是破折号还是斜杠有区别吗? 【参考方案1】:

这是基于假设您收到有关日期格式的错误,例如无效的月份值或预期数字时的非数字字符。

存储在数据库中的日期没有格式。当您查询日期时,您的客户正在格式化显示日期,如4/16/2011。通常,相同的日期格式用于选择和更新日期,但在这种情况下,它们看起来是不同的——因此您的客户端显然在做一些比 SQL*Plus 更复杂的事情。

当您尝试更新它时,它会使用默认的date format model。由于它的显示方式,您假设它是MM/DD/YYYY,但似乎不是。您可以找出它是什么,但最好不要依赖默认或任何隐式格式模型。

无论是否存在问题,您都应该始终指定日期模型:

UPDATE PASOFDATE SET ASOFDATE = TO_DATE('11/21/2012', 'MM/DD/YYYY');

由于您没有指定时间组件 - 所有 Oracle DATE 列都包含时间,即使是午夜 - 您也可以使用 date literal:

UPDATE PASOFDATE SET ASOFDATE = DATE '2012-11-21';

您也许应该检查当前值是否不包含时间,尽管列名表明它不包含。

【讨论】:

【参考方案2】:

以下是设置日期和时间的方法:

update user set expiry_date=TO_DATE('31/DEC/2017 12:59:59', 'dd/mm/yyyy hh24:mi:ss') where id=123;

【讨论】:

【参考方案3】:

如果此 SQL 正在任何 peoplesoft 特定代码(应用程序引擎、SQLEXEC、SQLfetch 等)中使用,您可以使用 %Datein metaSQL。 Peopletools 会自动将日期转换为运行应用程序的数据库平台可接受的格式。

如果此 SQL 用于从查询分析器(如 SQLDeveloper、SQLTools)执行后端更新,则使用的日期格式是错误的。 Oracle 期望日期格式为 DD-MMM-YYYY,其中 MMM 可以是 JAN、FEB、MAR 等。

【讨论】:

适合使用 3rd 方更新工具,而不是编写自己的 SQL。 ++【参考方案4】:

只是添加到亚历克斯普尔的答案,这是你如何做日期和时间:

    TO_DATE('31/DEC/2017 12:59:59', 'dd/mm/yyyy hh24:mi:ss')

【讨论】:

以上是关于更新 Oracle SQL 表中的日期的主要内容,如果未能解决你的问题,请参考以下文章

Access中的日期格式如何转换?

Oracle 触发器检查一个表中的课程持续时间,如果课程是特定日期,则阻止更新

如何按特定顺序从 select 中执行 Oracle SQL 更新?

在oracle怎样更新表中的数据

Oracle SQL:使用另一个表中的数据更新表

当我调用触发器更新 STUDENT 表中的总数时,Oracle 中的 SQL 出错