gpt4 book ai didi

sql - 在 SQL Server 2012 上按空格拆分文本

转载 作者:行者123 更新时间:2023-12-02 00:54:33 26 4
gpt4 key购买 nike

我使用的是 SQL Server 2012,因此没有可用的字符串拆分功能。

假设我有一个名为 DISK_VOLUME 的表,其中只有一列 RESULT,目前有 4 行:

RESULT
----------------------------------------
P: 220825387008 959589646336 DADOS
I: 166207356928 959589646336 INDEXS
E: 636080054272 799165902848 LOG
C: 462246113280 999651536896

我想要的是一个按空格拆分这些行的查询,显示 4 列,如:

Caption  | Space 1      | Space 2        | Volume Name 
---------+--------------+----------------+--------------
P: | 220825387008 | 959589646336 | DADOS
I: | 166207356928 | 959589646336 | INDEXS
E: | 636080054272 | 799165902848 | LOG
C: | 462246113280 | 999651536896 |

但是无法控制字符串中的空格数量。它可以像

  • 词空间词
  • 字空间空间空间空间字

这意味着单独使用 charindex(' ', ini_pos, ini_pos + 1) 是行不通的,因为我不能指望在空格查找后立即找到下一个单词。

所以基本上我一直在寻找的是任何函数或命令组合,它们可以动态地按空格拆分行(递归函数、xml、IDK)。我这样做的所有尝试都失败了。

最佳答案

您可以使用 XML 拆分字符串。您首先需要将字符串转换为 XML 并将空格替换为 startend XML 标签

将字符串转换为 XML 后,您可以使用 XQuery 以正确的格式获取结果。

要在多列中显示数据,您可以简单地使用 PIVOT

;WITH CTE AS
(
SELECT
F1.results,
O.splitdata,
row_number() over(partition by results order by (select 1)) rn FROM
(
SELECT *,
cast('<X>'+replace(F.results,' ','</X><X>')+'</X>' as XML) as xmlfilter
from [YourTableName] F
)F1
CROSS APPLY
(
SELECT fdata.D.value('.','varchar(500)') as splitdata
FROM f1.xmlfilter.nodes('X') as fdata(D)
) O
where splitdata <> ''
)

select [1] [Caption],[2] [Space1],[3] [Space2], [4] [Volume Name]
from CTE c
PIVOT (max(splitdata) for rn in ([1],[2],[3],[4])) pvt

Online Demo

输出

+---------+--------------+--------------+-------------+
| Caption | Space1 | Space2 | Volume Name |
+---------+--------------+--------------+-------------+
| C: | 462246113280 | 999651536896 | NULL |
+---------+--------------+--------------+-------------+
| E: | 636080054272 | 799165902848 | LOG |
+---------+--------------+--------------+-------------+
| I: | 166207356928 | 959589646336 | INDEXS |
+---------+--------------+--------------+-------------+
| P: | 220825387008 | 959589646336 | DADOS |
+---------+--------------+--------------+-------------+

关于sql - 在 SQL Server 2012 上按空格拆分文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com