首页 > 解决方案 > 处理传递给 LEFT 或 SUBSTRING 函数错误的无效长度参数

问题描述

我有一个相当简单的查询,它使用该Substring函数从描述中提取信息。但是,某些描述格式异常,导致错误

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

如果 Substring 函数失败,我想返回整个描述。但是,在线搜索解决方案并没有让我有所收获。该TRY...CATCH构造似乎很有用,但我不知道如何在这种情况下使用它。

Select 
    ST.Description
    , SUBSTRING(ST.Description, PATINDEX('% ([0-9]% x %) -%', ST.Description) + 2, CHARINDEX('x', SUBSTRING(ST.Description, PATINDEX('% ([0-9]% x %) -%', ST.Description) + 2, 20))-2) AS SubTaskQTY    
From astTaskSubTasks ST    
Join astTasks T ON T.Id = ST.ParentId
Join astAssets A ON A.Id = T.AssetId
Where A.Code = '2016100011'

标签: sqlsql-servertsqlsubstring

解决方案


试试这个:

Select 
ST.Description
, CASE PATINDEX('% ([0-9]% x %) -%', ST.Description) 
        WHEN 0 THEN ST.Description
        ELSE SUBSTRING(ST.Description, PATINDEX('% ([0-9]% x %) -%', ST.Description) + 2, CHARINDEX('x', SUBSTRING(ST.Description, PATINDEX('% ([0-9]% x %) -%', ST.Description) + 2, 20))-2)
    END
 AS SubTaskQTY

From astTaskSubTasks ST

Join astTasks T ON T.Id = ST.ParentId
Join astAssets A ON A.Id = T.AssetId

Where A.Code = '2016100011'


SELECT  PATINDEX('% ([0-9]% x %) -%', '1 x -') 

推荐阅读