INSERT INTO #NEWSTATICFILTER
SELECT DISTINCT
(SELECT STATICNAME FROM #STATICFILTER WHERE IDNUM = @ic) AS STATICNAME,
(SELECT 1
FROM [CoSD].[ERSCommodityDataSeries] CD
WHERE CD.ERSCommodity_ID IN (LTRIM(RTRIM(CONVERT(INT, (SELECT SUBSTRING (M.STATICNAME, CHARINDEX('(', M.STATICNAME, 0) + 1, (CHARINDEX(')', M.STATICNAME, 0) - CHARINDEX('(', M.STATICNAME, 0) - 1))
FROM #STATICFILTER M
WHERE IDNUM = @ic)))))
AND (CD.ERSCommodity_SourceSeriesID NOT LIKE '%(N%' OR CD.ERSCommodity_SourceSeriesID IS NULL)),
(SELECT 1 FROM [CoSD].[ERSCommodityDataSeries] CD
WHERE CD.ERSCommodity_ID IN (LTRIM(RTRIM(CONVERT(INT, (Select SUBSTRING (M.STATICNAME,CHARINDEX('(',M.STATICNAME,0)+1,(CHARINDEX(')',M.STATICNAME,0)-CHARINDEX('(',M.STATICNAME,0)-1)) FROM #STATICFILTER M WHERE IDNUM =@ic )) )) )AND CD.ERSCommodity_SourceSeriesID LIKE '%(N%' AND CD.ERSCommodity_SourceSeriesID IS NOT NULL),
当我尝试执行此查询时,它将引发以下错误:
传递给LEFT或SUBSTRING函数的长度参数无效
我知道这是一个重复的问题,但是我对如何解决这个问题一无所知。
答案 0 :(得分:0)
如果没有您的数据,我认为这是无法回答的,因为查询的确切行为将取决于数据。据我从您提供的查询结果看,问题似乎是您有一个或多个M.STATICNAME条目,其中没有)。您正在尝试使用)在字符串中的位置减去(在字符串中的位置。)来计算两个SUBSTRING的长度。如果不存在,该值将变为0-某个值导致负值。看来字符串确实有一个(或整个东西变成0-(0-1)就是1。
在#STATICFILTER中查找类似于'%(%',而不是'%)%'的内容。