2013-07-18 67 views
1

enter image description hereenter image description here您好,在下面的查询中我遇到了“无效的长度参数传递给左或SUBSTRING函数”的问题。你能为我解决这个错误,以便我可以处理查询。查询中出错“传递给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。你能纠正这个查询或给我一个确切的查询来执行相同的操作吗?

+0

可以使查询更具可读性?..其一团糟 –

+1

你能不能给我们的一个例子你的表格记录?也许解决方案是在ProcessInstanceName错误的长度... –

+0

我已编辑整个查询为你 – Anoop

回答

2

SUBSTRING的长度参数始终是参数#3。 只有当此参数为< 0时,才会发生此错误。 这意味着你有字符串的第一次出现的问题,格外这个表达式:

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

也许你无法找到ProcessInstanceDescriptionKeyInstr,这就是为什么它失败。

如何防范此错误取决于您想要做什么。

编辑

一个对付这种方式是检查您的令牌已经发现(“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, 
    ... 
+0

你可以给我整个查询,以便我可以插入它,并检查我是否能够获得URL的唯一列 – Anoop

+0

@Anoop:正如Ozren所说,*您如何防范这种错误取决于您想要做什么。*在'ProcessInstanceDescription'中找不到'KeyInstr'时,您想要做什么?即作为SUBSTRING的结果你想要返回什么? –

+0

@Anoop:另外,如果Ozren给你提供整个查询,你会学到什么吗? –

相关问题