SQL:传递给LEFT或SUBSTRING函数的长度参数无效

时间:2014-10-09 13:05:10

标签: sql sql-server

尝试执行以下查询时出现以下错误:

  

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

select A.NUMBER,
       SUBSTRING(A.DESCRIPTION,
                 CHARINDEX(','+CAST(A.Description as VARCHAR(255)) + ',','from')+4, 
                 CHARINDEX(','+CAST(A.Description as VARCHAR(255))+ ',','to')- 1)
from  dbo.ACTIVITYM1 A
where A.DESCRIPTION like 'Reassignment from%' 

架构详细信息:

  • Activitym1:表名称
  • 描述:列
  • 编号:专栏。

请让我知道,这个错误的原因是什么。

A.Description包含如下内容

"从PSM_Support重新分配到PPM_Support" 我试图在1列中获取PSM_Support,在另一列中获取PPm_Support。

2 个答案:

答案 0 :(得分:0)

这是你的substring分解:

SELECT SUBSTRING(
    A.DESCRIPTION,
    CHARINDEX(','+CAST(A.Description as VARCHAR(255))+',','from')+4, -- start
    CHARINDEX(','+CAST(A.Description as VARCHAR(255))+ ',','to')- 1  -- length
)

我会通过将它放入自己的列来检查第三个参数(长度)。它必须是> 0

答案 1 :(得分:0)

您已正确理解CHARINDEX的语法。你必须从'中搜索或者'到'在描述中但没有来自'来自'或者'到'。我希望你能在这里理解这个问题。只需反转它们就可以了解它。