【问题标题】:Oracle 11g queryOracle 11g 查询
【发布时间】:2015-02-04 14:33:00
【问题描述】:

我正在尝试编写一个查询,如果另一列满足某些条件,它将更改表中所需的数据。它将需要将“Last_logon”列与 SYSDATE 进行比较,如果 Last_logon 日期早于(SYSDATE - 45 天),我希望它将表中名为“STATUS”的列从“Active”更改为“Inactive” .

以下是我到目前为止所写的内容,但一个问题是“Last_logon”列的数据类型为 varchar2,格式为 Month,DD YYYY HH:MM。任何建议都会很棒我尝试将 varchar2“转换”为日期数据类型,但这只会导致大量错误消息。

ALTER TABLE technician_tbl
ALTER COLUMN 'STATUS'
WHERE 'Last_logon' > (SYSDATE -45);

【问题讨论】:

  • 向我们展示您尝试将其转换为什么以及错误消息的样子
  • 该查询在 Oracle 中毫无意义。
  • 提示:ALTER TABLE 语句修改表的架构,即添加列、删除列、重命名列等。这不是您想要的。您想更改表中的数据。这就是 UPDATE(或者可能是 MERGE)语句的用途。
  • 谢谢,我会稍微阅读一下,然后再试一次。我会发布我得到的任何结果。我对此很陌生。
  • 将“last_logon”更改为 DATE 数据类型 .. 永远不要将日期存储为字符串 .. 以后只会对您造成伤害 ... 保证。

标签: sql oracle11g


【解决方案1】:

怎么样:

UPDATE technician_tbl
  SET status = 'Inactive'
  WHERE TO_DATE(last_logon, 'MONTH, DD YYYY HH:MM) < SYSDATE - 45;

COMMIT;

我假设列 Last_logon 实际上称为 LAST_LOGON。如果它真的使用大小写混合拼写,则需要将其名称放在双引号中:"Last_Logon"

【讨论】:

    【解决方案2】:

    如果刚刚针对 Oracle 9 数据库进行了尝试。您正在寻找的内容与此类似:

    Update Technician_tbl 
    Set Status = 'Inactive'
    Where TO_DATE(Last_Logon, "MM.DD.YYYY HH:MM") > (SYSDATE -45)
    

    假设您的Last_Logon 确实具有MM.DD.YYYY HH:MM 的格式。如果上次登录是其他格式,则需要相应地更改To_Date()函数。

    如果 Last_Logon 的格式为 MONTH, DD YYYY HH:MM,则函数将为 TO_DATE(Last_Logon, 'MONTH, DD YYYY HH:MM')

    由于您是 SQL 世界的新手:如果您使用 SQL plus,您可能需要在查询末尾添加 COMMIT 以便将更改写入数据库。

    更多信息: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm

    【讨论】:

      【解决方案3】:

      ALTER TABLE 技术员_tbl 更改列“状态” WHERE 'Last_logon' > (SYSDATE -45);

      我不认为它是 Oracle 中有效的查询语法。

      一个问题是“Last_logon”列是数据类型 varchar2,格式为 Month, DD YYYY HH:MM。

      您在 STRING 和实际 DATE 之间挣扎。但是,这不是您问题的主要问题。

      如果 Last_logon 日期早于(SYSDATE - 45 天),我希望它将表中名为“STATUS”的列从“Active”更改为“Inactive”。

      要根据操作操作数据,需要触发器或其他替代方法就足够了。

      【讨论】:

        猜你喜欢
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-22
        • 1970-01-01
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        相关资源
        最近更新 更多