我有一个包含大文本字符串的列,例如:
一些唯一的名称字符串/另一个唯一名称 string / string_12345.jpg,一些唯一的名称字符串/另一个唯一的名称 string / string_45765.jpg,一些唯一的名称字符串/另一个唯一的名称 串/ string_98765.jpg
唯一存在的模式是我需要的子串包含文件类型“.jpg”之前的5个数字。我需要的每个子字符串也以“,”
结尾我需要使用.jpg分隔符的东西(可能在字符串的其他地方使用“。”)和分隔符之前的5个索引。 有关从哪里开始的任何建议或指示?字符串可以更长,包含数十个“.jpg”或一个。
预期结果
这样的事情:
"12345.jpg45765.jpg98765.jpg"
最终结果是经过一些更多的清理后,它可能会如下所示。但是我不想让原来的问题复杂化。上面的结果可以满足我的需求。
"12345.jpg - 45765.jpg - 98765.jpg"
答案 0 :(得分:1)
如果你只需要在第一个.jpg
之前的五个字符,那么你可以这样做:
select (case when str like '%_____.jpg%'
then substring(str, charindex('.jpg', str) - 5, 5)
end) as char5
否则,您将需要更重的设备 - 一个表值UDF来分割字符串,递归CTE或花哨的XML解析。
答案 1 :(得分:0)
这只是一个想法:
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
答案 2 :(得分:0)
我推荐一篇关于计数表及其操作字符串的好处的帖子:
http://sql-question.blogspot.com.ar/2012/10/what-is-tally-table-in-sql-server.html
这是您创建计数或数字表的方法:
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
我稍后会回来并用一个可利用的脚本完成这个答案,同时尝试与你的桌子交叉加入。