2013-01-21 26 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