2017-05-19 57 views
3

我正在处理查询。我试图拉取停止名称的第二个字,用空格分隔。传递给LEFT或SUBSTRING函数的长度参数无效错误msg

因此,如果停止名称是“Jane Doe”,我想拉动“Doe”。

我有我试图在SQL中定义一个字段,它看起来像这样:

[pull the second word] = SUBSTRING([STOP_NAME], (CHARINDEX(' ', [STOP_NAME], 1)) + 1, (CHARINDEX(' ', [STOP_NAME], CHARINDEX(' ', [STOP_NAME], 1) + 1)) - (CHARINDEX(' ', [STOP_NAME], 1)) - 1) 

当我键入这,我得到了以下错误消息:

Invalid length parameter passed to the LEFT or SUBSTRING function. 

我究竟做错了什么?

更新:

我想拉第二个字只。如果停止名称是“Caroline Jane Doe”,那么我只想拉“Jane”。

谢谢!

回答

1

为什么不只是这样呢?就拿LEN字符串,减去空间CHARINDEX的起始位置,并把它插入到子串的起始位置:

[pull the second word] = 
SUBSTRING([STOP_NAME],(CHARINDEX(' ',[STOP_NAME], 1)) + 1, LEN([STOP_NAME]) - CHARINDEX(' ',[STOP_NAME], 1)) 
+0

感谢你的建议!如果我只有“Jane Doe”这样的两个单词,这种方法绝对有效。但是,如果我有多个词,比如“Caroline Jane Doe”,并且我想拉第二个单词“Jane”,那么它将不起作用,因为它拉动了整个“jane doe”。 – pynewbee

+0

你是对的,它只会在第一个空格字符后返回数据。 –

1

这是因为你的表达长度(三)参数评估,以一个负值。 如果单词中至少有2个空格(例如'abc def ghi'),那么表达式可以工作,如果只有一个空格('abc def'),则表达式的下面的部分评估为0,这可以使长度(第三个参数)负数,所以错误。

CHARINDEX( ' '[STOP_NAME],CHARINDEX('',[STOP_NAME],1)+ 1))

+0

谢谢你解释我做错了什么! – pynewbee

+0

请不要忘记upvote如果答案帮助..谢谢 – RKRC

相关问题