我有一个相当简单的查询,该查询使用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'
答案 0 :(得分:2)
尝试一下:
condition && action()
if (condition) action()
^^
"extra" characters __||
答案 1 :(得分:1)
尝试类似的方法,使您可以在尝试子字符串之前对其进行测试。
select
ST.[Description]
, case when FirstIndex > 2 and SecondIndex > 0
then SUBSTRING(ST.[Description], FirstIndex, SecondIndex) else ST.[Description] end AS SubTaskQTY
from (
select [Description]--, ParentId
, PATINDEX('% ([0-9]% x %) -%', [Description]) + 2 FirstIndex
, CHARINDEX('x', SUBSTRING([Description], PATINDEX('% ([0-9]% x %) -%', [Description]) + 2, 20)) - 2 SecondIndex
from astTaskSubTasks
) ST
join astTasks T ON T.Id = ST.ParentId
join astAssets A ON A.Id = T.AssetId
where A.Code = '2016100011'