我有一个场景,我想得到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]成为子串。 请帮忙
答案 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)
SUBSTRING
与CASE 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