【问题标题】:SQL update only values whose value is not already updatedSQL 仅更新其值尚未更新的值
【发布时间】:2016-08-04 06:57:17
【问题描述】:

我有一个查询,它会更新表中的所有票证。 我希望它只更新其值需要更新的票,而不是更新所有行。 例如 如果slabreachdays 已经是10,那么新值也是10,它不应该更新。 这是我的更新查询。

update ticket 
set TICKET.slabreachdays =
FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) 
* 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) -
MIDNIGHT_SECONDS(current timestamp)))/86400.0)
where TICKET.VENDOR like 'ABC' 
and TICKET.STATUS NOT IN('CANCELLED','CLOSED')

这是我的选择查询,它只选择需要更新的票证。这是我需要转换为更新查询的查询

select * from (
    select ticketid,slabreachdays,
    FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) * 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) - MIDNIGHT_SECONDS(current timestamp)))/86400.0)
    as newValue
    from ticket
    where TICKET.MLOUTSOURCEVENDOR like 'ABC' and TICKET.STATUS NOT IN('CANCELLED','CLOSED'))
where SLABREACHDAYS != newValue

【问题讨论】:

    标签: sql database db2


    【解决方案1】:

    试试看

    Where .... 和slabeachdays aller 计算表达式

    【讨论】:

      【解决方案2】:

      试试这个

      update ticket 
      set TICKET.slabreachdays =
      FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) 
      * 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) -
      MIDNIGHT_SECONDS(current timestamp)))/86400.0)
      where TICKET.VENDOR like 'ABC' 
      and TICKET.STATUS NOT IN('CANCELLED','CLOSED') and
      TICKET.slabreachdays <>
      (FLOOR(((DAYS(TICKET.creationdate) - DAYS(current timestamp)+10) 
      * 86400 + (MIDNIGHT_SECONDS(TICKET.creationdate) -
      MIDNIGHT_SECONDS(current timestamp)))/86400.0))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 2021-04-21
        • 2016-06-12
        相关资源
        最近更新 更多