Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在确定特殊字符时如何使用CASE?_Sql Server_Tsql - Fatal编程技术网

Sql server 在确定特殊字符时如何使用CASE?

Sql server 在确定特殊字符时如何使用CASE?,sql-server,tsql,Sql Server,Tsql,我试图创建一个代码,根据一组临界值对特定列进行不同的更新 我在客户记录中有名字。现在我需要根据标题中的数据更新名字 逻辑应该是这样的 UPDATE Customer SET FirstName = If TITLE contains special characters THEN set firstname to blank ELSE SET it to FirstName From

我试图创建一个代码,根据一组临界值对特定列进行不同的更新

我在客户记录中有名字。现在我需要根据标题中的数据更新名字

逻辑应该是这样的

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
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
我在为特殊角色做逻辑方面有困难。 我不确定是在CASE中使用CASE还是在IF和CASE语句中使用CASE。 我能够使用以下代码识别特殊字符:

SELECT title FROM Customer where LTRIM(RTRIM(title)) NOT LIKE '%[`'' -''|-~.,-@!#$^&*()<>:;''"_+\/=?0-9]%' 
我试图将此合并到我的案例中,但我得到了一个语法错误

关于解决这个问题的最佳方法有什么建议吗

到目前为止,我的代码是这样的

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
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

这可能对你有帮助-

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]%'

假设任何不是空格或字母的字符都被视为特殊字符

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

天哪,我的语法非常接近:哦,非常感谢:你真的应该开始接受一些答案了