日期:2014-05-17  浏览次数:20610 次

请教在sql中,如何从一个字符串中提取img的路径呢?
比如:
declare @sql varchar(1000)
set @sql='<br /><br />程序员身上的一个好笑的事情是,我们在毕生的职业生涯中都相信:我们的工作是告诉计<img src="http://www.csdn.com/ArticleImages/20130507000941.jpg" alt="def" />算机如何去做。<br /><br /><strong>真实情况</strong><br />真实情况是,计算机能正确的按照命令去运行。无论你写的是“Hello&nbsp;World”,还是用无人飞机去杀死一个人,而人会。计算机把程序员写的代码编译成字节比特,真正会去看你写的是什么的只有人类。<br /><br /><strong>写软件要像讲故事</strong><br />如果你对你的工作和你写的代码的行为有了新的认识,你会马上很清楚的发现,编程工作更像<img Src="http://www.csdn.com/ArticleImages/20130507000942.jpg" alt="abc" />讲故事。<br /><br />想一想。你是如何知道一个人讲故事没人爱听的?这很简单,他老跑题,他老是纠结在不重要的细节上,他老是在故事场景中挑来跳去,等等。你立刻能知道故事被他讲烂了。'

请问要从@sql指取出
http://www.csdn.com/ArticleImages/20130507000941.jpg

http://www.csdn.com/ArticleImages/20130507000942.jpg
这两个路径要如何实现呢?

------解决方案--------------------
如果只有两个就好办,要是有两个以上的话可能需要用正则表达式了
declare @sql varchar(max)
set @sql='<br /><br />程序员身上的一个好笑的事情是,我们在毕生的职业生涯中都相信:
我们的工作是告诉计<img src="http://www.csdn.com/ArticleImages/20130507000941.jpg" alt="def" />算机如何去做。<br /><br /><strong>真实情况</strong><br />真实情况是,计算机能正确的按照命令去运行。无论你写的是“Hello&nbsp;World”,还是用无人飞机去杀死一个人,而人会。计算机把程序员写的代码编译成字节比特,真正会去看你写的是什么的只有人类。<br /><br /><strong>写软件要像讲故事</strong><br />如果你对你的工作和你写的代码的行为有了新的认识,你会马上很清楚的发现,编程工作更像<img Src="http://www.csdn.com/ArticleImages/20130507000942.jpg" alt="abc" />讲故事。<br /><br />想一想。你是如何知道一个人讲故事没人爱听的?这很简单,他老跑题,他老是纠结在不重要的细节上,他老是在故事场景中挑来跳去,等等。你立刻能知道故事被他讲烂了。'

SELECT SUBSTRING(@sql,CHARINDEX('"h',@sql,1)+1,CHARINDEX('" alt="',@sql,1)-CHARINDEX('"h',@sql,1))
SELECT REVERSE(SUBSTRING(REVERSE(@sql),PATINDEX('%gpj%',REVERSE(@sql)),PATINDEX('%"=crs%',REVERSE(@sql))-PATINDEX('%gpj%',REVERSE(@sql))))

/*
----------------------------------------------------------------------------------------------------------------
http://www.csdn.com/ArticleImages/20130507000941.jpg"

(1 行受影响)


----------------------------------------------------------------------------------------------------------------
http://www.csdn.com/ArticleImages/20130507000942.jpg
*/

------解决方案--------------------
先建个表和存储过程

CREATE TABLE [dbo].[test](
[test_str] [varchar](max) NULL
) ON [PRIMARY]



CREATE proc [dbo].[ins_splitproc](@list varchar(max))
as
DECLARE @ix int, @pos int, @str varchar(1000), @sum int
delete from test
SET @pos = 1
SET @ix = 1
SET @sum = 0 
WHILE @ix > 0 
BEGIN
SET @ix = charindex('"', @list, @pos)