【发布时间】:2021-07-19 07:30:00
【问题描述】:
我收到了错误
传递给左侧或子字符串函数的长度参数无效
我知道传递了负值,这是错误的原因。
子字符串查询是获取第一个破折号和第二个破折号之间的数据
例如:样本数据“ABC-123-ABCDEF”,预期结果“123”
对于相同的数据,错误不会始终如一地发生,有时会发生错误,并且大多数时候都可以正常工作。我想了解为什么查询对于相同的数据表现不同。
SELECT
item.tril_gid,
CAST(SUBSTRING(comp.fr_productnumber,
CHARINDEX('-', comp.fr_productnumber, 1) + 1,
CHARINDEX('-', comp.fr_productnumber,
CHARINDEX('-', comp.fr_productnumber, 1) + 1) -
CHARINDEX('-', comp.fr_productnumber, 1) - 1) AS INT) AS comp.ProNum
FROM
SCQLI comp WITH(nolock)
LEFT JOIN
ffc ffc WITH(nolock) ON ffc.sc_quote_line_item = comp.tril_gid
LEFT JOIN
ffa ffa WITH(nolock) ON ffa.tril_gid = ffc.ffassembly
LEFT JOIN
scq item WITH(nolock) ON item.tril_gid = ffa.sc_quote_line_item
INNER JOIN
jde jde WITH(nolock) ON jde.tril_gid = item.fr_jde_order
INNER JOIN
frq frq WITH(nolock) ON frq.tril_gid = jde.frquoterevision
WHERE
comp.fr_jde_order = 'QFXZZBSHH1YRFZULBEBS3C4HULDV42VR'
AND comp.FR_ProductNumber <> ''
【问题讨论】:
-
当遇到与您的假设不匹配的值时,您的代码不是为了安全地忽略或使用涉及子字符串的表达式中的替代逻辑而编写的。更重要的是,不要再用nolock 乱写代码了。此外,由于连接顺序以及内连接和外连接的混合,您的左连接会隐式转换为内连接。
标签: sql-server substring