传递给 Sql Server 中的 LEFT 或 SUBSTRING 函数的长度参数无效

问题描述 投票:0回答:3

尝试执行以下查询时

Declare @t table (id int, string varchar(1000))

INSERT INTO @t (id, string)
SELECT 1, 'zxzzxx,ppppbppp,trtrtr,tyyt,hgghh,fefew,rewr,rwerer' 

;WITH test (id, lft, rght, idx)
AS 
(
        SELECT t.id
                ,LEFT(t.string, CHARINDEX(', ', t.string) - 1)
                ,SUBSTRING(t.string, CHARINDEX(', ', t.string) + 2, DATALENGTH(t.string))
                ,0
        FROM @t t
        UNION ALL
        SELECT c.id
                ,CASE WHEN CHARINDEX(', ', c.rght) = 0 THEN c.rght ELSE LEFT(c.rght, CHARINDEX(', ', c.rght) - 1) END
                ,CASE WHEN CHARINDEX(', ', c.rght) > 0 THEN SUBSTRING(c.rght, CHARINDEX(', ', c.rght) + 2, DATALENGTH(c.rght)) 
                        ELSE '' END
                ,idx + 1
        FROM test c 
        WHERE DATALENGTH(c.rght) > 0
)

select id, lft from test 

我收到以下错误

Msg 537, Level 16, State 2, Line 8
Invalid length parameter passed to the LEFT or SUBSTRING function.

但同样适用于 SELECT 1,“the,quick,brown,fox,jumped,over,the,lazy,dog”

请帮忙

sql-server-2005 t-sql
3个回答
3
投票

你的话之间似乎缺少一个空格。

您当前正在寻找

', '
的字符索引,而不是
','

并且该字符串没有任何

', '
的匹配。


2
投票

执行这些步骤时通常会出现此错误消息;

  • 当您使用Substring时, 功能。

    当您使用 CharIndex (用于 字段、选定的单词或单词 搜索,或字符的长度 不够)

返回值在查询表达式中返回给各个服务器,交易结果

0
(零)返回,如果错误返回
-1

这不会导致服务器返回值-1或比较对象的错误。


0
投票

我收到了同样的错误,但这是由于我的字符串超出了 LEFT 函数本身的 4000 个字符限制。

© www.soinside.com 2019 - 2024. All rights reserved.