問題:
在 SQL 中,使用 SUBSTRING 基於分隔符號分割字串,當分隔符號不存在時可能會導致錯誤。下面的程式碼示範了這一點:
<code class="language-sql">SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName, SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, 1000) AS LastName FROM MyTable</code>
當遇到沒有分隔符號的行時,它會拋出錯誤:「傳遞給 LEFT 或 SUBSTRING 函數的長度參數無效。」
解:
為了解決這個問題,可以在 SUBSTRING 函數中使用 CASE 語句,如下:
<code class="language-sql">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</code>
此更新後的程式碼使用 CHARINDEX 評估分隔符號的位置。如果找不到分隔符號(CHARINDEX 傳回 0),則 CASE 語句使用字串的長度來確保整個字串都被視為名字。如果存在分隔符,它會計算分隔符後第一個字元的位置作為姓氏的起始索引。
以上是如何在 T-SQL 中使用分隔符號安全地分割字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!