sql-server - 如何使用 CASE WHEN 来确定特殊字符?

标签 sql-server t-sql

我正在尝试创建一个代码,该代码将根据一组条件对特定列进行不同的更新。

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

逻辑应该是这样的......

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 中使用 CASE 还是使用 IF 和 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

最佳答案

这可能对你有帮助 -

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

关于sql-server - 如何使用 CASE WHEN 来确定特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16960449/

相关文章:

sql-server - 每晚将 Excel 电子表格导入 mysql 数据库

t-sql - 使用 SQL Server 2012+ 和 T-SQL 将列转换为行

sql - 如何在 SQL Server 中正确实现 quotename?

sql-server - 在 Visual Studio 2017 中升级报表服务器项目时出错

sql - 查询以列出父级列中的每个子记录

sql - TSQL使EXECUTE语句同步

mysql - Sql Server 到 MySql 数据迁移

c# - 为什么代码在查询数据库时会耗尽 CPU?

SQL 存储过程在 CTE 上使用 COUNT(*) 设置输出参数

sql-server - 如何更新具有唯一键约束的列?