【发布时间】:2020-07-09 03:41:37
【问题描述】:
这是一个看起来应该是一个简单的解决方案的问题,但我已经研究了一段时间,但无法弄清楚为什么我似乎无法在查询的一个区域中将 CASE 和在另一个区域中的 IF 结合起来。
有人看到这里发生了什么吗?我有一个旧数据集需要转换才能使用新表。数据从 WDDX 中提取并放入临时表中。这一切都正常工作。
这是我遇到麻烦的地方。我需要在出现 XXXX 时将一个值提取到一个名为 DetailValue 的新列中,在这种情况下,XXXX 之后出现的值是属于 DetailValue 的数字,然后是 _,在这种情况下,出现在之后的数字_ 属于 RiskValue.. 另外,当 ZZZZ 出现时,后面的字符属于 DetailValue,它始终是最后一个字符。
当它只是 CASE 时,一切正常,但是当我添加 IF 来获取一个值时,它告诉我:
“关键字 'IF' 附近的语法不正确。消息 156,级别 15,状态 1,过程 OldSysDataConv 关键字 'THEN' 附近的语法不正确。
代码是:
SELECT VarName,
CASE
WHEN (CHARINDEX('XXXX', VarName) > 0 and SUBSTRING(VarName, CHARINDEX('XXXX', VarName), len(VarName)) like '%XXXX%') or SUBSTRING(VarName, CHARINDEX('ZZZZ', VarName), len(VarName)) like '%ZZZZ%' then
left(replace(left(replace(VarName, 'XXXX', ''), len(VarName)-4), 'ZZZZ', ''), (len(VarName)-5))
else
null
END as DetailName,
IF CHARINDEX('ZZZZ', VarName) > 0 THEN
right(VarName, 1)
END
as DetailValue,
【问题讨论】:
标签: sql sql-server tsql if-statement case