消息错误“传递给LEFT或SUBSTRING函数的长度参数无效。”

时间:2016-06-23 01:30:06

标签: sql-server

那是我的SQL Server脚本:

SELECT
    [CaseAttribute],
    LEFT([CaseAttribute], CHARINDEX(',', [CaseAttribute]) - 1) AS [Function],
    REPLACE(SUBSTRING([CaseAttribute], CHARINDEX(',', [CaseAttribute]), LEN([CaseAttribute])), ',', '') AS [Module]
FROM 
    view_CaseAttribute

和我的字符串= 'Change shift,Change shift,DInex'。当我运行脚本时,我收到一个错误:

  

Msg 537,Level 16,State 5,Line 1   传递给LEFT或SUBSTRING函数的长度参数无效。

1 个答案:

答案 0 :(得分:1)

嗯,显然它没有找到任何逗号,因此CHARINDEX的结果为0而LEFT的结果为-1。你没有尝试修改你的查询以找出发生了什么吗?像这样的东西,例如:

SELECT
    [CaseAttribute],
    CHARINDEX(',', [CaseAttribute]) AS CommaIndex
FROM view_CaseAttribute
ORDER BY CHARINDEX(',', [CaseAttribute]) ASC

另一种选择,以避免错误:

CASE WHEN CHARINDEX(',', [CaseAttribute]) > 0 THEN LEFT([CaseAttribute], CHARINDEX(',', [CaseAttribute]) - 1) END AS [Function],

最后,这是Elina采用的解决方案:

SELECT [CaseAttribute],
    PARSENAME(REPLACE([CaseAttribute], ',', '.'), 3) 'Function',
    PARSENAME(REPLACE([CaseAttribute], ',', '.'), 2) 'Module',
    PARSENAME(REPLACE([CaseAttribute], ',', '.'), 1) 'Product'
FROM view_CaseAttribute