【发布时间】:2023-03-10 09:12:01
【问题描述】:
我需要在列名称中分解一个值:AB: ABC-ABCDE 我需要中间部分,即ABC。我正在使用 SUBSTRING 和 CHARINDEX 来完成此操作,但出现错误:
Msg 537, Level 16, State 2, Line 393
Invalid length parameter passed to the LEFT or SUBSTRING function.
当我减去 CHARINDEX 以获得 SUBSTRING 中的最后一个值时,就会发生这种情况。 代码:
SELECT PRODUCT = (SUBSTRING(Name, CHARINDEX(' ',Name)+1,CHARINDEX('-',Name)-(CHARINDEX(' ',Name)+1)))
FROM A
我做错了什么?
更新:表中有另一个值,例如:'ABC-ABC: ABCDEFG-ABCDEF GH'。这给出了负值,因此为什么会出现错误。结果应该是ABCDEFG
【问题讨论】:
-
表达式导致超出范围的值,因此出现错误。单独评估表达式以查找正在评估的参数值对于字符串是否正确。
-
@Dheerendra 我确实分别评估了它们,我得到了两个值的数字,所以它应该能够减去
-
如果减法结果是负值怎么办?评估减法并检查
-
我确实进行了评估,不,它不会导致负值,因为我已经将更大的长度切换到开头。如果不是减法,我还能如何做到这一点?
-
我偶尔会遇到这种情况,它总是是一个导致负长度的边缘情况。真的很难找到。
标签: sql sql-server tsql substring charindex