select URL = case when charindex('?',url) > 0 then substring(url,0,charindex('?',url)) else url end 
from PVTable需求就是当url如果有带?号的话,就只保留?号前的那段url
否则的话就用原来的url就可以了PVTable 的数据大概是70万左右,这样的操作很耗时间大家帮个忙,怎么操作能提高性能

解决方案 »

  1.   

    select 
    URL = case when charindex('?',url) > 0 then substring(url,1,charindex('?',url)-1) else url end 
    from PVTable 
      

  2.   

    SELECT SUBSTRING(URL+'?',1,CHARINDEX('?',URL+'?')-1) URL FROM TB
      

  3.   

    其实还有其他操作
    select url,count(1) from 
    (
       select URL = case when charindex('?',url) > 0 then substring(url,0,charindex ('?',url)) else url end 
       from PVTable 
    ) a group by url
      

  4.   

    group by url 之后要把这些数据往其他表里插
    所以数据是要(group by url之后)全部出来的
      

  5.   

    楼主直接在最后加个?
    查询应该快点,SELECT SUBSTRING(URL+'?',1,CHARINDEX('?',URL+'?')-1) URL FROM TB
      

  6.   

    恩,我觉得你这做法很不错,少去了case when的操作
    但是我刚才运行了下,还是要20秒多
      

  7.   

    不是group by 之后,大概还有20万数据
    然后把这20万 往另外一张表里保存
      

  8.   

    改成like 查询就可以利用上索引了
      

  9.   

    select left(url,charindex('?',url)) from PVTable where charindex('?',url)>0