传递给LEFT或SUBSTRING函数VB.net的长度参数无效

时间:2017-08-08 13:34:57

标签: sql sql-server

我的数字看起来像数据库(DB)中的P-01-2.8-M而我正在使用此查询:

SELECT LEFT(No, CHARINDEX('-', No, CHARINDEX('-', No) + 1) - 1) as Prefix 
FROM DB, Table 
WHERE No = GRNNo 
AND QtyLeft > 0 
AND No LIKE @No + '%' 
GROUP BY LEFT(No, CHARINDEX('-', No, CHARINDEX('-', No) + 1) - 1) 
ORDER BY MAX(No)

我得到“传递给LEFT或SUBSTRING函数的无效长度参数”。你能告诉我问题在哪里,如果可能的话,如何解决它。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

no列中至少有一个值不包含两个连字符。 将您的查询更改为

SELECT LEFT(No, CHARINDEX('-', No, CHARINDEX('-', No) + 1) - 1) as Prefix 
FROM DB
INNER JOIN Table ON No = GRNNo 
WHERE QtyLeft > 0 
AND No LIKE @No + '%' 

AND CHARINDEX('-', No, CHARINDEX('-', No) + 1) > 0

GROUP BY LEFT(No, CHARINDEX('-', No, CHARINDEX('-', No) + 1) - 1) 
ORDER BY MAX(No)

请注意我已将隐式联接更改为显式联接。