如何在Microsoft SQL中拆分反斜杠分隔的字符串为两列
在SQL Server中拆分带反斜杠的字符串为两列
方法一:使用CHARINDEX + LEFT/RIGHT(兼容所有SQL Server版本)
假设你的字段名为YourColumn,表名为YourTable,可以通过定位反斜杠的位置直接拆分:
SELECT -- 提取反斜杠前的部分作为Column A LEFT(YourColumn, CHARINDEX('\', YourColumn) - 1) AS ColumnA, -- 提取反斜杠后的部分作为Column B,若需要给(DP19)前添加空格,用REPLACE处理 REPLACE( RIGHT(YourColumn, LEN(YourColumn) - CHARINDEX('\', YourColumn)), '(DP19)', ' (DP19)' ) AS ColumnB FROM YourTable;
说明:
CHARINDEX('\', YourColumn)返回第一个反斜杠的位置,LEFT截取该位置之前的所有字符;RIGHT截取反斜杠之后的剩余字符,通过REPLACE可给括号前补空格(如果原字符串没有的话);- 若字符串中只有一个反斜杠,这个方法高效直接。
方法二:使用STRING_SPLIT(SQL Server 2016及以上版本)
如果你的SQL Server版本支持STRING_SPLIT,可以先拆分再重组为两列:
WITH SplitData AS ( SELECT YourColumn, value, ROW_NUMBER() OVER (PARTITION BY YourColumn ORDER BY (SELECT NULL)) AS RowNum FROM YourTable CROSS APPLY STRING_SPLIT(YourColumn, '\') ) SELECT MAX(CASE WHEN RowNum = 1 THEN value END) AS ColumnA, REPLACE(MAX(CASE WHEN RowNum = 2 THEN value END), '(DP19)', ' (DP19)') AS ColumnB FROM SplitData GROUP BY YourColumn;
说明:
STRING_SPLIT按反斜杠将字符串拆分为多行,ROW_NUMBER()给每行标记序号;- 用
CASE和MAX将两行数据转成两列,同样可通过REPLACE补空格。
内容的提问来源于stack exchange,提问作者Jewel
相关产品推荐
相关产品推荐

