select之后在客户端用正则替换,一次返回数十万没有任何意义,一般都分页显示的。

解决方案 »

  1.   

    System.Text.RegularExpressions.Regex.Replace("南京路123弄456号7890室 ", @"\d", "*")
      

  2.   

    如果在SQL里替换,可以采用replace函数.
      

  3.   

    IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
    GO
    CREATE TABLE TB([ADDRESS] NVARCHAR(50))
    INSERT TB SELECT N'南京路123弄456号7890室'
    INSERT TB SELECT N'南京路456弄789号1000室'
    IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL
    DROP FUNCTION DBO.GET_NUMBER
    GO
    CREATE FUNCTION DBO.GET_NUMBER(@S NVARCHAR(50))
    RETURNS NVARCHAR(50)
    AS
    BEGIN
    WHILE PATINDEX('%[0-9]%',@S) > 0
    BEGIN
    set @s=stuff(@s,patindex('%[0-9]%',@s),1,'*')
    END
    RETURN @S
    END
    GO
    SELECT DBO.GET_NUMBER([ADDRESS])FROM TB
    /*--------------------------------------------------
    南京路***弄***号****室
    南京路***弄***号****室(2 行受影响)*/
      

  4.   

    还不如直接就:
    select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(地址,'0','*'),'1','*'),'2','*'),'3','*'),'4','*'),'5','*'),'6','*'),'7','*'),'8','*'),'9','*')
    写得长些,但效率肯定高.
      

  5.   

    》》写得长些,但效率肯定高.等有空测试一下,至少还有两种方法,com的正则和clr的正则。我估计这个还真的是效率最高的
      

  6.   

    IF OBJECT_ID('DBO.f_replace') IS NOT NULL
    DROP FUNCTION DBO.f_replace
    GO
    create function f_replace
    (@s varchar(100))
    returns varchar(100)
    as
    begin
       declare @i int,@j int   
       while patindex('%[0-9]%',@s)>0
       begin
         set @s=stuff(@s,patindex('%[0-9]%',@s),1,'*')
      end
     return @s
    endselect dbo.f_replace(@s)10万条,需要分页
      

  7.   

    测试结果:15万条,直接replace,3秒,用杰纶的函数,7秒.
      

  8.   

    事实证明一堆replace的速度是反复partindex的2倍以上...
      

  9.   

    事实证明,用SQL去搞定字符串是大才小用。:D......
      

  10.   

    两种方法:
    1,在程序里处理,对显示出来的数据中的数字进行隐藏处理。这点可以参照楼上的办法。
    2,在SQL 里,用函数替换数字!
        
      

  11.   

    10多万条数据,再用SQL把数字替换成***,真是拿着数据库折腾,千万不要什么都用数据库解决,那前台的程序干什么吃的?!!!!