你的意思是?
DECLARE @s VARCHAR(8000)
SET @s='aa,bbde,c'
SELECT CHARINDEX(',', ...@s...)之后得出的结果是 8 而不是 3, 是这个意思吗

解决方案 »

  1.   

    只有reverse以后再做问题是4000个字符正向检索和反向检索效率有什么区别么?刚才做了一下简单的测试,影响执行时间的主要问题不在reverse,而在于所检索的字符在整个字符串中的位置
      

  2.   

    --你可以执行下面的语句看看,reverse虽然有影响,但是权重不如所检索的字符所在位置的影响来得大
    set nocount on
    select top 100000  id=identity(int,1,1),'abcdefghijklmnopqrestuvwxyz' as col2 into # from syscolumns a,syscolumns b declare @t datetime
    set @t=getdate()
    select charindex('z',reverse(col2))as a into #1 from #
    select datediff(ms,@t,getdate())set @t=getdate()
    select charindex('z',(col2))as a into #2 from #
    select datediff(ms,@t,getdate())set @t=getdate()
    select charindex('a',reverse(col2))as a into #3 from #
    select datediff(ms,@t,getdate())set @t=getdate()
    select charindex('a',(col2))as a into #4 from #
    select datediff(ms,@t,getdate())
    go
    drop table #,#1,#2,#3,#4
    set nocount off
      

  3.   

    本地机器上的测试结果来看,当被检索字符在字符串中位置越靠后,reverse函数造成的影响越小(倒过来的测试结果也有,即用了reverse比不用reverse还快,不过这个忽略)
      

  4.   

    個人覺得加reverse和不加reverse幾乎不影響效率啊~~
      

  5.   

    我試了下reverse一個len=2000的字串,SQL Query Analyzer顯示執行時間0:00:00
    所以,應該沒什麼效率問題
      

  6.   

    DECLARE @s VARCHAR(8000)
    Declare @c varchar(10)
    SET @s='aaabbaade,cc'
    Set @c = 'cc'
    SELECT Len(@s)-CharIndex(Reverse(@c), Reverse(@s)) - ( Len(@c)-1 ) + 1如果你仅仅想要从尾部开始查找的话,上面的结果应该就可以了用了Reverse后的效率不会低很多的,不会成倍数的关系。