2013-01-21 30 views
0

在我的SQL我有串状提取字符串中的SQL

Declare @Temp Varchar(Max) ='Pravin Gaonkar: 12 Jan 2013 11:56:21 : Hello World 1*Makarand Sawant: 12 Jan 2013 15:36:39 : Hello World 2*Makarand Sawant: 12 Jan 2013 21:21:51 : Hello World 3 *' 

我用“*”作为Seprator

我想要从第二个最后*字最后一个字符串到最后*字符

在上面的例子中所得到的字符串将是

Makarand Sawant: 12 Jan 2013 21:21:51 : Hello World 3 

我的查询

SELECT Reverse(Left(Reverse(@Temp), Charindex('*', Reverse(@Temp)) -1)) 

但它给我的错误Invalid length parameter passed to the LEFT or SUBSTRING function.

数据库是SQL SERVER 2008

+1

你所期望的最后一个后'*'字符? – gbn

回答

2

这最终*后不承担任何字符,你至少有2 *整体。

SELECT REVERSE(SUBSTRING(LTRIM(Reverse(@Temp)), 2, CHARINDEX('*', @Temp, 2)+1)) 

个人而言,我会将其存储在单独的子句中,并将其拆分到客户端代码中。 Java和.net有比SQL Server更好的字符串处理方式

+0

如果字符串是'Thakur:2013年1月21日16:14:46:Cash is Reversals。* Namdev:2013年1月21日17时41分51秒:SLM呼叫登录自动柜员机没有进入服务Docket No#W301211224 Cust JAGJEET *'然后它不起作用 – Shaggy

1

另一种方法:您需要在字符串(您要分割字符串的位置)中间使用一个*以使用此代码。

Select replace(Right(yourstring,Len(yourstring) - charindex('*',yourstring)),'*','') 
from yourtable 
; 

SQLFIDDLE DEMO

结果:

NEWVALUE 
Namdev: 21 Jan 2013 17:41:51 : SLM call logg for ATM not coming 
inservice Docket No# W301211224 Cust JAGJEET 
+0

如果字符串中只有一个“*”,则不起作用 – Shaggy

+0

是的,这是我们已经采取的假设来达到这个解决方案..中间至少有一个'*'来模拟'split'... :)只要中间有一个'*'来分割它的作用,那末在末尾是否有'*'并不重要。 http://www.sqlfiddle.com/#!3/d97bb/1 – bonCodigo

+0

那么这个字符串怎么样--- >>'Thakur:2013年1月21日11:21:27:Rp致命* Singh:2013年1月21日14: 17:24:根据托管人Akshy Ule 844681 engg在网站工作* Namdev:2013年1月21日16:21:15:SLM呼叫登录RP疑难解答编号#317402 *' – Shaggy