patindex parterns

时间:2015-04-27 14:26:14

标签: sql sql-server string pattern-matching

我正在尝试修剪一个列(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中返回)并返回它们。

如果您有任何问题,请提前告知,不要犹豫不决。

斯蒂芬

1 个答案:

答案 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