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

我使用了 '*' 作为分隔符

我想检索从第二个最后一个*字符到最后一个*字符的最后一个字符串

在上面的示例中,结果字符串将是

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

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

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 回答