SQL Server-使用分隔符和';n';人物

SQL Server-使用分隔符和';n';人物,sql,sql-server,Sql,Sql Server,我有一个包含大文本字符串的列,例如: 某些唯一名称字符串/另一个唯一名称 string/string_12345.jpg,某个唯一名称string/另一个唯一名称 string/string_45765.jpg,某个唯一名称string/另一个唯一名称 string/string98765.jpg 目前唯一的模式是我需要的子字符串,它正好包含文件类型“.jpg”前面的5位数字。我需要的每个子字符串也以“,”结尾 我需要一些使用.jpg分隔符的东西(可能字符串中的其他地方使用了“.”),以及该分隔

我有一个包含大文本字符串的列,例如:

某些唯一名称字符串/另一个唯一名称 string/string_12345.jpg,某个唯一名称string/另一个唯一名称 string/string_45765.jpg,某个唯一名称string/另一个唯一名称 string/string98765.jpg

目前唯一的模式是我需要的子字符串,它正好包含文件类型“.jpg”前面的5位数字。我需要的每个子字符串也以“,”结尾

我需要一些使用.jpg分隔符的东西(可能字符串中的其他地方使用了“.”),以及该分隔符之前的5个索引。 关于从哪里开始有什么建议或建议吗?字符串可以更长,并且包含几十个“.jpg”或一个

预期结果

大概是这样的:

     "12345.jpg45765.jpg98765.jpg"
最后的结果是,在进一步清理之后,它可能会如下所示。然而,我不想使原来的问题复杂化。以上结果适合我目前的需要

     "12345.jpg - 45765.jpg - 98765.jpg"

如果您只希望在第一个
.jpg
之前包含五个字符,则可以执行以下操作:

select (case when str like '%_____.jpg%'
             then substring(str, charindex('.jpg', str) - 5, 5)
        end) as char5
否则,您将需要更重的设备—一个表值UDF来拆分字符串、一个递归CTE或奇特的XML解析。

这只是一个想法:

declare @text varchar(max)='some unique name string/another unique name string/string_12345.jpg,some unique name string/another unique name string/string_45765.jpg,some unique name string/another unique name string/string_98765.jpg'
print @text
declare @new varchar(max)
while (charindex('.jpg',@text))>0
begin
select substring(@text,charindex('.jpg',@text)-5,5)
set @text=SUBSTRING(@text,charindex('.jpg',@text)+5,len(@text))
end

我将推荐一篇关于理货表及其对操纵字符串的好处的帖子:

这是创建理货表或数字表的方式:

SELECT TOP 10000 IDENTITY(int,1,1) AS Number
    INTO Numbers
    FROM sys.objects s1       --use sys.columns if you don't get enough rows returned to generate all the numbers you need
    CROSS JOIN sys.objects s2 --use sys.columns if you don't get enough rows returned to generate all the numbers you need
ALTER TABLE Numbers ADD CONSTRAINT PK_NumbersTest PRIMARY KEY CLUSTERED (Number)

select count(*) from Numbers

我稍后会回来,用一个可使用的脚本完成这个答案,同时尝试交叉连接您的表。

这间接地回答了您的问题,但更好的表结构是每个文件名有一条记录。在数据库中使用逗号分隔的值是非常糟糕的。根据示例数据,预期结果是什么?在此添加2或3个具有预期输出的示例数据并编写CLR用户函数来执行此操作。SQL并不是这种操作的最佳语言@兰伯特,我完全同意。此数据来自客户电子表格。不幸的是,我无法控制它的编译方式。我基本上是在清理它,使其可用。这只适用于找到“.jpg”分隔符的第一种情况。我需要它循环通过。我正在使用while开发for循环。我知道你提到了递归CTE。所以我会调查的