在查询中,我使用了几个SUBSTRING
,CHARINDEX
,LEN
T-SQL函数。SQL Server查询传递给LEFT或SUBSTRING函数的长度参数无效
我得到一个错误:
Invalid length parameter passed to the LEFT or SUBSTRING function.`
好吧,我试图找出哪个记录导致无法对其进行过滤。
在WHERE语句,我尝试:
WHERE ...
and mt.id between 1 and 200
它失败。好的,我尝试缩小范围,改为:
WHERE ...
and mt.id between 1 and 100
它工作正常。好的,请尝试下一个范围:
WHERE ...
and mt.id between 100 and 200
它也可以正常工作!不要有任何错误。它爆炸我的大脑。 任何想法?
这是我尝试运行代码:
SELECT
*
FROM [someTable] mt
INNER JOIN persons p p.ID = mt.personID
LEFT JOIN someTable2 pb
ON
SUBSTRING(pb.shortName, 0, CHARINDEX(' ', pb.shortName)) = mt.OSB
OR(
SUBSTRING(mt.OSB, 0, CHARINDEX('/', mt.OSB))
= SUBSTRING(pb.shortName, 0, CHARINDEX('/', pb.shortName))
AND
'0' + SUBSTRING(mt.OSB, CHARINDEX('/', mt.OSB) + 1, LEN(mt.OSB))
= SUBSTRING(pb.shortName, CHARINDEX('/', pb.shortName) + 1,
CHARINDEX(' ', pb.shortName) - CHARINDEX('/', pb.shortName) - 1))
WHERE mt.OSB IS NOT null AND mt.shet IS NOT NULL AND CHARINDEX('/', mt.OSB) > 0
-- and mt.id between 1 and 200
-- and mt.id between 1 and 100
and mt.id between 100 and 200
order by mt.id
我使用范围来找出哪条记录是错误的。从1-200到相同范围的ID失败。当我将它分成两个子集并分别运行时,id的相同范围会传递良好。这是问题。 – Alexandr
这是问题,但它不是问题。 – ps2goat