問題:
在 SQL 中,使用 SUBSTRING 基於分隔符分割字符串,當分隔符不存在時可能會導致錯誤。下面的代碼演示了這一點:
SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName,
SUBSTRING(myColumn, CHARINDEX('/', myColumn) 1, 1000) AS LastName
FROM MyTable
當遇到沒有分隔符的行時,它會拋出錯誤:“傳遞給 LEFT 或 SUBSTRING 函數的長度參數無效。”
解決方案:
為了解決這個問題,可以在 SUBSTRING 函數中使用 CASE 語句,如下所示:
SELECT SUBSTRING(myColumn, 1, CASE CHARINDEX('/', myColumn)
WHEN 0
THEN LEN(myColumn)
ELSE CHARINDEX('/', myColumn) - 1
END) AS FirstName
,SUBSTRING(myColumn, CASE CHARINDEX('/', myColumn)
WHEN 0
THEN LEN(myColumn) 1
ELSE CHARINDEX('/', myColumn) 1
END, 1000) AS LastName
FROM MyTable
此更新後的代碼使用 CHARINDEX 評估分隔符的位置。如果找不到分隔符(CHARINDEX 返回 0),則 CASE 語句使用字符串的長度來確保整個字符串都被視為名字。如果存在分隔符,它會計算分隔符後第一個字符的位置作為姓氏的起始索引。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3