插入转换和验证列

时间:2017-12-14 16:18:44

标签: sql sql-server tsql

我需要在Insert中检查值的组合。如果不存在则我需要默认为None。并且只获得前6个字符。如何格式化该语法? Sql Server 2008r

伪码

Insert Into Changes
Release Information

Select
length(6, release info)
If Employer or EMPLYR, use EMPLYR
If Family, use OFAM
If FATHER use FATHER
If Friend, use OTHER
If Guardian or GUARDN, use GUARDN
If MOTHER, use MOTHER
If NONE, use NONE
If OFAM use OFAM
If OTHER, use OTHER
If PARENT OR Parents, use PARENT
If RESTR, use RESTR
If Sister, use OFAM
If Spouse, use Spouse
Else If not Valid (none of the above), use None
If Null use NROF

From Contacts

1 个答案:

答案 0 :(得分:1)

也许你需要的只是一个冗长的CASE表达式:

SELECT
    CASE WHEN LEFT([release info], 6) IN ('Employer', 'EMPLYR') THEN 'EMPLYR'
         WHEN LEFT([release info], 6) IN ('Family', 'Sister', 'OFAM') THEN 'OFAM'
         WHEN LEFT([release info], 6) = 'FATHER' THEN 'FATHER'
         WHEN LEFT([release info], 6) IN ('Friend', 'OTHER') THEN 'OTHER'
         WHEN LEFT([release info], 6) IN ('Guardian', 'GUARDN') THEN 'GUARDN'
         WHEN LEFT([release info], 6) = 'MOTHER' THEN 'MOTHER'
         WHEN LEFT([release info], 6) IN ('PARENT', 'Parents') THEN 'PARENT'
         WHEN LEFT([release info], 6) = 'RESTR' THEN 'RESTR'
         WHEN LEFT([release info], 6) = 'Spouse' THEN 'Spouse'
         WHEN [release info] IS NULL THEN 'NROF'
         ELSE 'NONE' END AS relationship
FROM Contacts;

注意:要映射的两个值EmployerGuardian实际上长度超过6个字符。我不知道这是否是一个拼写错误,但无论如何,上述逻辑对于这两种情况都会失败,因为我的CASE表达式只捕获最左边的6个字符。要解决此问题,我们可以匹配前6个字符,也可以使用更长的子字符串。