gpt4 book ai didi

sql-server - TSQL - 将分隔的字符串拆分为列

转载 作者:行者123 更新时间:2023-12-03 17:19:42 26 4
gpt4 key购买 nike


问题

我有许多文件名字符串,我想使用波浪线作为分隔符将其解析为列。字符串采用静态格式:

  • 文件路径示例 C:\My Documents\PDF
  • Surname 示例 Walker
  • 名字示例Thomas
  • 出生日期示例19991226
  • 文档创建日期时间示例 20180416150322
  • 文档扩展名示例.pdf

所以一个完整的连接示例应该是这样的:

C:\My Documents\PDF\Walker~Thomas~19991226~20180416150322.pdf

我想忽略字符串中给出的文件路径和扩展名,只将以下值解析为列:

  • 姓氏、名字、出生日期、文档创建日期时间

所以像这样:

SELECT Surname = --delimitedString[0]
FirstName = --delimitedString[1]
--etc.

我尝试过的

我知道我需要执行几项任务才能拆分字符串,首先我需要删除扩展名和文件路径,以便我可以返回由波浪线 (~) 分隔的字符串。

这对我来说是第一个问题,但是问题 2 是拆分新的分隔字符串本身,即

Walker~Thomas~19991226~20180416150322

我仔细阅读了这本非常全面的 question并且似乎(因为我使用的是 SQL Server 2008R2)唯一的选择是使用带有循环或递归 CTE 的函数,或者尝试使用 SUBSTRING()charIndex()< 进行非常困惑的尝试.

我知道如果我可以访问 SQL Server 2016,我可以使用 string_split 但遗憾的是我无法升级。

我确实可以访问 SSIS,但我对它还很陌生,所以决定尝试在 SQL 语句中完成大部分工作

最佳答案

这里有一个不用分离器的方法应该不会太复杂...

declare @var table (filepath varchar(256))
insert into @var values
('C:\My Documents\PDF\Walker~Thomas~19991226~20180416150322.pdf')


;with string as(
select
x = right(filepath,charindex('\',reverse(filepath))-1)
from @var
)

select
SurName= substring(x,1,charindex('~',x) - 1)
,FirstName = substring(x,charindex('~',x) + 1,charindex('~',x) - 1)
from string

关于sql-server - TSQL - 将分隔的字符串拆分为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49865247/

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