0

我之前的问题是 -将子字符串插入新列

我有两个案例要在同一列上运行。

首先 -

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。

如果数据以 I 为前缀,ZZZ-则跳过该部分。

如果数据不是ZZZ-并且以ABC-我想要复制的开头ABC(在某些情况下AB-1234应该是 NULL)。

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

123456我如何才能同时运行两者并仅针对格式为和的数据以 NULLS 结束AB-1234

感谢您的帮助。

4

2 回答 2

2

您想为此使用单个 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
于 2012-10-05T15:08:56.050 回答
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”接近尾声。认为这样更好。我没有可供我测试的服务器。

于 2012-10-05T14:41:02.877 回答