我正在尝试修剪一个列(ActionOutput)以仅在该列中显示两个子字符串。
我只需要显示以WRD或CAS开头的8个字符条目。
该列可以包含任何类型/数量的字符,并且它们不会始终包含具有指定模式的条目。
我的查询如下:
SELECT
TSRPT_C009 = ExecutionTime,
LastStatusMessageID,
LastStatusMessageIDName,
TSRPT_C007 = ExitCode,
TSRPT_C008 = ActionOutput,
(PATINDEX('%[cas][wrd]%',ActionOutput)) AS CASID
FROM v_TaskExecutionStatus tse
我也试过这个:
substring(
(substring(ActionOutput,(CHARINDEX('WRD0',ActionOutput)),8)),(CHARINDEX('CAS0',ActionOutput)),8
) AS CASID
但它也不适用于第二种模式。
有没有办法在字符串中搜索多个模式(从select中返回)并返回它们。
如果您有任何问题,请提前告知,不要犹豫不决。
斯蒂芬
答案 0 :(得分:0)
PATINDEX()
返回一个整数,而不是字符串。你可以试试这个:
(case when ActionOutput like '%cas%'
then substring(ActionOutput, charindex('cas', ActionOutput), 8)
when ActionOutput like '%wrd%'
then substring(ActionOutput, charindex('wrd', ActionOutput), 8)
end) as caswrd_8