本文介紹了傳遞給LEFT或SUBSTRING函數的長度參數無效-相同數據出現的錯誤不一致的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我收到錯誤
傳遞給Left或子字符串函數的長度參數無效
我知道傳遞的是負值,這是導致錯誤的原因。
子串查詢用于獲取第一個破折號和第二個破折號之間的數據
示例:樣本數據&ABC-123-ABCDEF&QOOT;,預期結果";123&QOOT;
對于相同的數據,錯誤不是一致出現的,錯誤有時會發生,并且大多數情況下工作正常。我想了解為什么查詢對相同的數據表現不同。
SELECT
item.tril_gid,
CAST(SUBSTRING(comp.fr_productnumber,
CHARINDEX('-', comp.fr_productnumber, 1) + 1,
CHARINDEX('-', comp.fr_productnumber,
CHARINDEX('-', comp.fr_productnumber, 1) + 1) -
CHARINDEX('-', comp.fr_productnumber, 1) - 1) AS INT) AS comp.ProNum
FROM
SCQLI comp WITH(nolock)
LEFT JOIN
ffc ffc WITH(nolock) ON ffc.sc_quote_line_item = comp.tril_gid
LEFT JOIN
ffa ffa WITH(nolock) ON ffa.tril_gid = ffc.ffassembly
LEFT JOIN
scq item WITH(nolock) ON item.tril_gid = ffa.sc_quote_line_item
INNER JOIN
jde jde WITH(nolock) ON jde.tril_gid = item.fr_jde_order
INNER JOIN
frq frq WITH(nolock) ON frq.tril_gid = jde.frquoterevision
WHERE
comp.fr_jde_order = 'QFXZZBSHH1YRFZULBEBS3C4HULDV42VR'
AND comp.FR_ProductNumber <> ''
推薦答案
下面說明了兩種不同的方法。第一個是ParseName()
…假設您的數據不超過4個元素,并且第二個元素使用了一點JSON
示例
Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values
('ABC-123-ABCDEF')
Select SomeCol
,WithParseName = parsename(replace(SomeCol,'-','.'),2)
,WithJSON = JSON_VALUE('["'+replace(SomeCol,'-','","')+'"]','$[1]')
From @YourTable
退貨
SomeCol WithParseName WithJSON
ABC-123-ABCDEF 123 123
這篇關于傳遞給LEFT或SUBSTRING函數的長度參數無效-相同數據出現的錯誤不一致的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,