【问题标题】:sql oracle update datesql oracle更新日期
【发布时间】:2015-04-21 08:05:05
【问题描述】:

我的表table1 有列date_txt,其中包括2/16/2011 12:00:00 AM - 列date_txtVARCHAR2 (250 Char)

我的表table1 也有date 列,这是一个DATE

我想“更新”我的领域:

最终的输出应该是:

表 1:

 date

 2/16/2011

所以它从table1date_txt获取“日期”并将其更新为date列作为日期。

有什么想法吗?我是一个该死的初学者。

【问题讨论】:

  • 为什么将日期/时间存储在 varchar 列中?为什么要将相同的数据存储两次?
  • @jarlh 我从现在是 varchar 的 excel 文件中导入了日期,但我希望它在另一列中作为日期
  • 我明白了,然后您将删除 date_txt 列?
  • 如果它是空的也没关系 - 所以不,我们不会删除它

标签: sql oracle date


【解决方案1】:

您可以使用 Oracle 的to_date function 将字符串转换为日期:

update table1 set "date" = to_date(date_txt, 'MM/DD/YYYY HH:MI:ss AM')

See it working at SQL Fiddle.

【讨论】:

  • 谢谢 - 我不得不添加一点来解决我的问题:'MM/DD/YYYY HH:MI:ss AM'
【解决方案2】:

列 date_txt,其中包括 2/16/2011 12:00:00 AM

  • 首先,DATE 没有任何格式。您看到的内容是为了方便地显示 解释日期值。

  • 其次,您应该永远不要将 DATE 存储为 VARCHAR2。这是一个大问题,也是一个糟糕的设计。

既然您有一个糟糕的设计,最好立即修复它。

按照以下步骤操作:

  1. 添加一个具有 DATE 数据类型的新列。
  2. 使用 TO_DATE 使用旧列中的日期值更新新列。
  3. 删除旧列。
  4. 将新列重命名为旧列。

我已经在这里回答了怎么做https://stackoverflow.com/a/29625772/3989608

【讨论】:

    【解决方案3】:

    尝试以下操作:

    update table1 set date=
        (select to_date(date_txt,'dd/mm/yyyy') from table1 where id=yourId) where id=yourId;
    

    使用主键列作为 id。

    如果这是您每次都需要的。我建议你使用Triggers

    【讨论】:

    • 这里不需要子查询?
    • 是的,你不需要子查询 :) 查看我的答案以获取示例
    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多