SQL我需要一个列的多个案例

时间:2012-10-05 14:35:23

标签: sql sql-server-2008

我之前的问题是 - insert substring into new column

我想在同一列上运行两种情况。

第一个 -

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)。< / p>

我的代码工作正常,但两个字符串不能一起运行,当我单独运行它们时,它们会取消上一个查询的工作。

我如何同时运行NULLS并以123456AB-1234

等格式的数据结束NULLS

感谢您的帮助。

2 个答案:

答案 0 :(得分: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”朝向结尾。认为这更好。我没有可供我测试的服务器。

答案 1 :(得分:0)

您想为此使用单个案例陈述:

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