2012-10-05 25 views
0

我刚才的问题是 - insert substring into new columnSQL我需要多个案件的一列

我有两个情况下,我想在同一列运行。

第 -

SET [ref_id] = CASE 
WHEN CHARINDEX('-', [full_id]) = 4 
THEN SUBSTRING([full_id], 1, 3) ELSE NULL 

第二 -

SET [ref_id] = CASE 
WHEN CHARINDEX('ZZZ-', [full_id]) = 1 
THEN SUBSTRING([full_id], 5, 3) ELSE NULL 

[full_id]列数据格式主要是ABC-123D2-45FG67但有些事情是所有数字或前缀ZZZ-

如果数据只是我希望[ref_id]列的数字为NULL。

如果数据前缀为ZZZ-我希望跳过该部分。

如果数据不ZZZ-ABC-开始我要复制的ABC(在某些情况下,有AB-1234这应该是NULL)。

我的代码工作正常,除了两个字符串不能一起工作,并且当我分别运行它们时,它们会取消先前查询的工作。

我如何可以同时运行,并用null最终只能像123456AB-1234

在格式数据谢谢你的帮助。

回答

0

这不仅仅是一个嵌套你的病例陈述(哈!)吗?

SET [ref_id] = CASE WHEN CHARINDEX('ZZZ-', [full_id]) = 1 THEN SUBSTRING([full_id], 5, 3) ELSE 
    (CASE WHEN CHARINDEX('-', [full_id]) = 4 THEN SUBSTRING([full_id], 1, 3) ELSE NULL end) end 

编辑:删除“else null”结束。认为这样更好。我没有可供我测试的服务器。

+0

我试图巢,但第一种情况后,它会给我的错误。现在就试试你的。 = D – weewa

+0

它给了我一个错误在这句话的结尾'错误的语法附近的关键字'ELSE''我认为它的最后一个'ELSE' – weewa

+0

哇,试图从()内删除else null,但不是外。谢谢! – weewa

0

你想使用一个case语句此:

SET [ref_id] = CASE WHEN CHARINDEX('ZZZ-', [full_id]) = 1 
        THEN SUBSTRING([full_id], 5, 3) 
        WHEN CHARINDEX('-', [full_id]) = 4 
        THEN SUBSTRING([full_id], 1, 3) 
        ELSE NULL 
       END