gpt4 book ai didi

Oracle - 检索具有时间戳值的日期

转载 作者:行者123 更新时间:2023-12-02 05:07:27 25 4
gpt4 key购买 nike

我们有这样一种情况,我们在 Oracle DB 中有一个表(比如 Forms),其中有一个日期类型的列(比如 edition_date)。它严格意味着以 YYYY-MM-DD(例如:2012-11-23)格式保存没有时间戳值的日期信息。

不幸的是,由于代码问题,许多行都使用时间戳值创建。此表中有大量记录,我只想更新那些包含此错误数据的行。我可以使用查询来做到这一点

UPDATE forms SET edition_date = TRUNC( edition_date ) 

我想给它添加一个 where 子句,所以它只更新坏数据。问题是,我不确定如何检索那些添加了时间戳的行。以下是我拥有的数据的快照:

    FORM_ID    EDITION_DATE
5 2012-11-23
6 2012-11-23 11:00:15
..
11 2010-07-11 15:23:22
..
13 2011-12-31

我只想检索表单 ID 为 6 和 11 的行。我尝试使用长度函数,但我认为这仅适用于字符串。有什么办法可以做到这一点。感谢任何能帮助我的人。

最佳答案

日期没有格式;您只会看到它的显示方式。但是,您的问题的答案实际上就是您所说的:

I want to add a where clause to it, so it updates only the bad data.

因此,如果日期不等于没有时间的日期:

update forms
set edition_date = trunc(edition_date)
where edition_date <> trunc(edition_date)

为确保不再发生这种情况,您可以添加 check constraint到你的 table :

alter table forms 
add constraint chk_forms_edition_date
check ( edition_date = trunc(edition_date) );

我建议不要所有以上。不要破坏可能有用的数据。您应该在不需要时间的地方简单地选择 trunc(edition_date)。您可能希望在将来使用这些时间。

你是对的,不要对日期使用 LENGTH() 等,这取决于你的 NLS_DATE_FORMAT设置等可能因 session 而异。处理日期时始终使用日期函数。

关于Oracle - 检索具有时间戳值的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16057770/

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