在Oracle SQL表中更新日期

时间:2012-11-21 15:59:29

标签: sql oracle date peoplesoft

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

Select ASOFDATE from PASOFDATE;

我得到4/16/2012

我尝试过运行此查询

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

但它不起作用。

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

4 个答案:

答案 0 :(得分:71)

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

存储在数据库中的日期没有格式。当您查询客户端格式化显示日期的日期时,请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';

您应该检查当前值是否包含时间,但列名称表示不包含时间。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

如果在任何特定于各种别名的特定代码(Application Engine,SQLEXEC,SQLfetch等)中使用此SQL,则可以使用%Datein metaSQL。 Peopletools会自动将日期转换为运行应用程序的数据库平台可以接受的格式。

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

答案 3 :(得分:-1)

为了补充Alex Poole的回答,以下是你如何做日期和时间:

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