问题:
在 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中文网其他相关文章!