0

私の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 *'

セパレータとして「*」を使用しました

*2番目の最後の文字から最後の*文字までの最後の文字列を取得したい

上記の例では、結果の文字列は次のようになります

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 です

4

2 に答える 2

2

これは、決勝の後にキャラクターがいないこと、および全体*で少なくとも 2 人いることを 前提としています。*

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

個人的には、これを別の句に格納し、クライアント コードで分割します。Java と .net は、SQL Server よりも文字列処理がはるかに優れています。

于 2013-01-21T12:46:46.613 に答える
1

別の方法:*このコードを使用するには、文字列の途中 (文字列を分割する場所) に 1 つ必要です。

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

SQLFIDDLE デモ

結果:

NEWVALUE
Namdev: 21 Jan 2013 17:41:51 : SLM call logg for ATM not coming
 inservice Docket No# W301211224 Cust JAGJEET 
于 2013-01-21T13:11:30.603 に答える