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),那么您可以使用正则表达式来更加简洁。
我正在尝试创建一个 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),那么您可以使用正则表达式来更加简洁。