Sql server 查询“传递给LEFT或SUBSTRING函数的长度参数无效”时出错

Sql server 查询“传递给LEFT或SUBSTRING函数的长度参数无效”时出错,sql-server,tsql,Sql Server,Tsql,您好,在下面的查询中,我遇到了传递给LEFT或SUBSTRING函数的长度参数无效的问题。你能帮我解决这个错误吗?这样我就可以进行查询了 select substring( a.ProcessInstanceDescription, charindex('http://', a.ProcessInstanceDescription ), charindex('KeyInstr', a.ProcessInstanceDescription ) - ch

您好,在下面的查询中,我遇到了传递给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。您能否更正此查询或给我一个精确的查询以执行相同的长度参数,因为子字符串始终是参数3。
只有当此参数为时,才能使查询更具可读性?。。这是一张表格,你能给我们举一个表格记录的例子吗?可能是ProcessInstanceName中的解决方案长度错误…我已经为您编辑了整个查询。您可以给我整个查询,以便我可以插入它,并检查我是否能够获得URL或URL的唯一列吗not@Anoop:正如奥兹伦所说,你如何防范这个错误取决于你想做什么。在ProcessInstanceDescription中找不到“KeyInstr”时,您想做什么?也就是说,作为子字符串的结果,您希望返回什么?@Anoop:另外,如果Ozren只是给您整个查询,您会学到什么吗?我希望得到子字符串中的URL,并将其返回到名为URL的其他列中。你能给我一个确切的问题来解决这个问题吗?@Anoop:不要把它当成个人问题,但这不是为了得到即时的解决方案。在这里,您可以找到查询的错误以及一种或几种修复方法。我相信这最后的编辑可以帮助你,如果你想做你的工作权利。
charindex('KeyInstr', a.ProcessInstanceDescription ) 
  - charindex('http://', a.ProcessInstanceDescription )
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, 
  ...