T-SQL 字符串拆分:解决丢失的分隔符
分隔符不一致的数据需要对缺失分隔符的情况进行稳健处理。 让我们检查一个常见问题:
想象一个表(“MyTable”),其中一个“名称”列以 FirstName/LastName
格式存储名称。 但是,某些条目可能缺少“/”分隔符:
<code>FirstName---LastName John--------Smith Jane--------Doe Steve-------NULL -- Missing delimiter Bob---------Johnson</code>
当分隔符缺失时,像这样的天真的 SUBSTRING
和 CHARINDEX
方法会失败:
SELECT SUBSTRING(Name, 1, CHARINDEX('/', Name)-1) AS FirstName, SUBSTRING(Name, CHARINDEX('/', Name) + 1, 1000) AS LastName FROM MyTable;
出现“无效的长度参数传递给 LEFT 或 SUBSTRING 函数”的错误是因为 CHARINDEX
在找不到分隔符时返回 0,导致子字符串长度为负。
解决方案:条件子串提取
解决方案涉及一个 CASE
语句来有条件地确定子字符串长度:
SELECT SUBSTRING(Name, 1, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) ELSE CHARINDEX('/', Name) - 1 END) AS FirstName, SUBSTRING(Name, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX('/', Name) + 1 END, 1000) AS LastName FROM MyTable;
此精炼查询使用 CASE
来处理两种情况:
CHARINDEX('/') = 0
): FirstName
的子字符串长度成为整个字符串长度 (LEN(Name)
),且 LastName
子字符串从超出结尾一个字符的位置开始字符串 (LEN(Name) 1
),有效返回 NULL
.SUBSTRING
逻辑。无论分隔符是否存在,这种强大的方法都可以保证正确的结果,从而防止“无效长度参数”错误。
以上是在 T-SQL 中拆分字符串时如何处理丢失的分隔符?的详细内容。更多信息请关注PHP中文网其他相关文章!