如何获取CASE语句的值的子字符串?

时间:2016-06-30 07:26:54

标签: sql

我有一个场景,我想得到CASE语句的子串。 对于Ex:

CASE WHEN PT.PURCHID LIKE '[A-Z]%'
THEN LEFT(PT.PURCHID, CHARINDEX('-', PT.PURCHID) - 1) 
ELSE 'NA' 
END AS [A],
SUBSTRING([A],1,3) AS PURCHASE_ORDER_PREFIX

我希望[A]成为子串。 请帮忙

2 个答案:

答案 0 :(得分:0)

你不能在别名[A]上执行子串,所以只需再次使用CASE:

CASE WHEN PT.PURCHID LIKE '[A-Z]%'
THEN LEFT(PT.PURCHID, CHARINDEX('-', PT.PURCHID) - 1) 
ELSE 'NA' 
END AS [A],
SUBSTRING(CASE WHEN PT.PURCHID LIKE '[A-Z]%'
          THEN LEFT(PT.PURCHID, CHARINDEX('-', PT.PURCHID) - 1) 
          ELSE 'NA' 
          END,1,3) AS PURCHASE_ORDER_PREFIX

答案 1 :(得分:0)

SUBSTRINGCASE WHEN函数并行执行(请记住,SQL使用set操作,而不是过程操作)。这意味着[A]想要执行时可能尚未计算SUBSTRING。这就是SQL解析器无法识别该范围内[A]的原因。

您有两个选择:

1)将[A]函数中的SUBSTRING替换为组成[A]的完全相同的代码。这不是首选,因为它会导致代码重复。

2)从当前查询中删除SUBSTRING函数,包装原始查询,如下所示:

SELECT *
, SUBSTRING([A],1,3) AS PURCHASE_ORDER_PREFIX 
FROM ( /* ORIGINAL QUERY */) AS ResultSet