以下查询中的Hello我遇到了“传递给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 :(得分: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,
...