那是我的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函数的长度参数无效。
答案 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