首页 > 解决方案 > 传递给 LEFT 或 SUBSTRING 函数 SQL Server 的长度参数无效

问题描述

我有一张返回的桌子

SELECT * 
FROM #tt

这将返回如下输出:

在此处输入图像描述

我想做的是这个

SELECT
    item, LEN(item), LEFT(item, CHARINDEX(' =', item) - 1) AS v_col,
    item, LEN(item), SUBSTRING(item, CHARINDEX('=', item) + 1, LEN(item)) AS v_val
    --,v_val=SUBSTRING(item,CHARINDEX('=',item)+1,LEN(item))
FROM
    #tt
CROSS APPLY 
    dbo.SplitStrings(value)

但我得到这个错误:

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

标签: sql-server

解决方案


在您第一次打电话给CHARINDEX您时,您正在搜索空格,然后是=,这似乎没有出现在您的实际数据中。我的猜测是,您会看到此错误,或者是因为某些列值根本没有=。您可以通过使用CASE表达式来解决:

SELECT
    item,
    CASE WHEN item LIKE '%=%'
         THEN LEFT(item, CHARINDEX('=', item) - 1) END AS v_col,
    CASE WHEN item LIKE '%=%'
         THEN SUBSTRING(item, CHARINDEX('=', item) + 1, LEN(item)) END AS v_val
FROM #tt
CROSS APPLY dbo.SplitStrings(value)

推荐阅读