SQL WHERE CASE 检查哈希值

SQL WHERE CASE Check hash values

我正在尝试创建一个 CASE,我可以在其中检查一个唯一的哈希值,该哈希值将根据票证创建过程中匹配的哈希值设置新的所有者。这是我目前拥有的:

 Select DISTINCT HD_TICKET.*, USER
 FROM HD_TICKET
 Where  
   CASE 
    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:020:#%' THEN
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID
    WHERE USER.ID = '1234'

   WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:030:#%' THEN
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID
    WHERE USER.ID = '1235'

   WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:040:#%' THEN
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID
    WHERE USER.ID = '1236'

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:050:#%' THEN
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID
    WHERE USER.ID = '1237'

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:060:#%' THEN
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID
    WHERE USER.ID = '1238'

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:070:#%' THEN
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID
    WHERE USER.ID = '1239'

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:080:#%' THEN
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID
    WHERE USER.ID = '1240'
END

改用合并:

https://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx

您根据条件进行匹配,并在匹配或不匹配时选择执行某些操作等等...您还可以保存或return 结果。

您简化(并再次简化)。这应该可以满足您的需求:

update hd_ticket
set hd.owner_id = case
                    when hd.title like '%#:020:#%' THEN '1234'
                    when hd.title like '%#:030:#%' THEN '1235'
                    when hd.title like '%#:040:#%' THEN '1236'
                    when hd.title like '%#:050:#%' THEN '1237'
                    when hd.title like '%#:060:#%' THEN '1238'
                    when hd.title like '%#:070:#%' THEN '1239'
                    when hd.title like '%#:080:#%' THEN '1240'
                  end
from hd_ticket hd
where hd.hd_status_id =    1
  and hd.title        like '%#:0[2345678]0:#%'

如果您的 Sql 实现不支持字符 类 作为通配符,您需要执行如下操作:

where hd.hd_status_id =    1
  and (    hd.title like '%#:020:#%'
        OR hd.title like '%#:030:#%'
        OR hd.title like '%#:040:#%'
        OR hd.title like '%#:050:#%'
        OR hd.title like '%#:060:#%'
        OR hd.title like '%#:070:#%'
        OR hd.title like '%#:080:#%'
      )

如果您 SQL 实现支持正则表达式(如 Oracle),那么您可以使用正则表达式来更加简洁。