子串和Charindex - 与减号运算符的问题

时间:2013-11-21 16:51:01

标签: sql sql-server-2012

我正在使用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.

我已经隔离了所有不同的表达方式,并且它们都可以自行完成。如果我用+替换减号运算符,那么查询运行正常,我无法找出原因?

2 个答案:

答案 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)

输出: 我的名字我 我的名字