1

在此处输入图像描述在此处输入图像描述您好,在下面的查询中,我面临“传递给 LEFT 或 SUBSTRING 函数的长度参数无效”的问题。您能否帮我解决这个错误,以便我可以处理查询。

select
  substring(
    a.ProcessInstanceDescription, 
    charindex('http://', a.ProcessInstanceDescription ), 
    charindex('KeyInstr', a.ProcessInstanceDescription ) 
      - charindex('http://', a.ProcessInstanceDescription )), 
  c.StreamName AS Category,
  ProcessInstanceAppianID as jobId,
  a.ProcessInstanceName,
  a.ProcessInstanceTargetDate AS TargetDate,
  a.ProcessInstanceDescription as TaskDescription,
  b.Name as department,
  SUBSTRING(
    ProcessInstanceName, 
    NULLIF(
      PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%',ProcessInstanceName),
      0),
    7) as code
from 
  InternalUseOnly..ProcessInstance a 
  join InternalUseOnly..Departments b 
    on b.KeyDepartment = a.KeyDepartmentEntered 
    AND b.updoperation < 2
  join InternalUseOnly..ProcessStream c 
    on c.KeyProcessStream = a.KeyProcessStream 
    and c.updoperation < 2
where 
  ProcessInstanceCompleted is null
  and a.KeyProcessStream in (330) 
  and a.updoperation < 2

我在上面附上了一张图片。我只想从任务描述中获取 URL。您能否更正此查询或给我一个确切的查询以执行相同的操作

4

1 回答 1

2

SUBSTRING 的长度参数始终是参数#3。只有当此参数 <0 时才会出现此错误。这意味着您在第一次出现 SUBSTRING 时遇到问题,特别是这个表达式:

charindex('KeyInstr', a.ProcessInstanceDescription ) 
  - charindex('http://', a.ProcessInstanceDescription )

KeyInstr可能你在现场找不到ProcessInstanceDescription,这就是它失败的原因。

如何防范此错误取决于您要执行的操作。

编辑

解决此问题的一种方法是检查您的令牌是否已找到('KeyInstr')。如果不是,则将结果替换为所需的值,无论是 0、-1、NULL 还是您需要表示意外情况的其他值。

CASE 
  WHEN charindex('KeyInstr', a.ProcessInstanceDescription) != 0 THEN
    charindex('KeyInstr', a.ProcessInstanceDescription ) 
      - charindex('http://', a.ProcessInstanceDescription )
  ELSE 0 END

...或者在您的情况下,最好这样做...

SELECT
  CASE 
    WHEN charindex('KeyInstr', a.ProcessInstanceDescription) != 0 THEN
      substring(
        a.ProcessInstanceDescription, 
        charindex('http://', a.ProcessInstanceDescription ), 
        charindex('KeyInstr', a.ProcessInstanceDescription ) 
          - charindex('http://', a.ProcessInstanceDescription ))
    ELSE 0 END, 
  ...
于 2013-07-18T06:29:24.783 回答