我正在尝试创建一个代码,该代码将根据一组批评对特定列执行不同的更新。
我在客户记录中有一个FirstName。现在我需要根据标题中的数据更新FirstName。
逻辑应该是这样的......
UPDATE Customer
SET FirstName = If TITLE contains special characters
THEN set firstname to blank
ELSE
SET it to FirstName
From Customer c
INNER JOIN CustomerList cl
on c.customerid = cl.customerid
我在为特殊字符做逻辑时遇到了麻烦。 我不确定是否在CASE或IF和CASE语句中使用CASE。 我可以使用以下代码识别特殊字符:
SELECT title FROM Customer where LTRIM(RTRIM(title)) NOT LIKE '%[`'' -''|-~.,-@!#$^&*()<>:;''"_+\/=?0-9]%'
我尝试将其合并到我的CASE中,但是我遇到了语法错误。
有关解决此问题的最佳方法的任何建议吗?
到目前为止,我的代码就是这样......
SELECT ID, CASE LTRIM(RTRIM(title))
WHEN Title NOT LIKE '%[`'' -''|-~.,-@!#$^&*()<>:;''"_+\/=?0-9]%' AND RTRIM(LTRIM(title)) NOT IN ('MR', 'MS', 'MRS', 'Miss', 'MSTR', 'MR.', 'MS.', 'MRS.', 'CHD', 'CHIL', 'CHLD', 'DR', 'DR.', 'MAST',''))
THEN title
END
FROM customer
答案 0 :(得分:1)
这可能对你有所帮助 -
SELECT ID,
CASE
WHEN LTRIM(RTRIM(title)) NOT LIKE '%[`'' -''|-~.,-@!#$^&*()<>:;''"_+\/=?0-9]%'
AND RTRIM(LTRIM(title)) NOT IN ('MR', 'MS', 'MRS', 'Miss', 'MSTR', 'MR.', 'MS.', 'MRS.', 'CHD', 'CHIL', 'CHLD', 'DR', 'DR.', 'MAST','')
THEN title
END
FROM customer
更新
DECLARE @temp TABLE (title NVARCHAR(50))
INSERT INTO @temp (title)
VALUES ('~test1'), ('MR test'), ('is ok')
SELECT t.*
FROM @temp t
WHERE NOT EXISTS(
SELECT 1
FROM (VALUES
('MR'), ('MS'), ('MRS'),
('Miss'), ('MSTR'), ('MR.'),
('MS.'), ('MRS.'), ('CHD'),
('CHIL'), ('CHLD'), ('DR'),
('DR.'), ('MAST')
) c(t2)
WHERE LTRIM(RTRIM(title)) LIKE '%' + t2 + '%'
)
AND LTRIM(RTRIM(title)) NOT LIKE '%[`'' -''|-~.,-@!#$^&*()<>:;''"_+\/=?0-9]%'
答案 1 :(得分:1)
假设任何不是空格或字母的字符都被认为是特殊的
UPDATE c
SET FirstName =
case when replace(Title, ' ', '') like '%[^a-z]%'
THEN ''
ELSE FirstName
end
FROM Customer c
INNER JOIN CustomerList cl
on c.customerid = cl.customerid