我正在使用SQL Server 2012.在PROJECT_NAME
列中,我的订单项都具有相同的格式,如下所示:
PROJECT_NAME
--------------
Caulk, Norman v BPI
Caulk, Norman v BWD
Carper, Robert v ECH
我正在尝试提取名字(文本字符串中的第二个名字)并使用此查询:
select
substring(Project_name,(charindex(',',PROJECT_NAME,0)),((CHARINDEX(' v ',PROJECT_NAME)-
(charindex(',',PROJECT_NAME)))))
from RPT_PROJ_MAIN pm
当我运行此查询时,我收到以下错误:
Invalid length parameter passed to the LEFT or SUBSTRING function.
我已经隔离了所有不同的表达方式,并且它们都可以自行完成。如果我用+
替换减号运算符,那么查询运行正常,我无法找出原因?
答案 0 :(得分:0)
这意味着,尽管您说所有行具有相同的格式,但有些行却没有。
具体而言,如果某个值最后没有v <something>
,您将获得该错误,因为SUBSTRING()
函数的第三个参数将具有负值
这是 SQLFiddle 演示
答案 1 :(得分:0)
嗨我有解决方案,只是使用下面提到的技巧来处理这个问题。需要声明要减去的值。请看下面的示例。
声明@Val numeric = 2 PRINT LEFT('我的名字是Bhumesh Shah',charindex('是','我的名字是Bhumesh Shah')) PRINT LEFT('我的名字是Bhumesh Shah',charindex('是','我的名字是Bhumesh Shah') - @ val)
输出: 我的名字我 我的名字