数据库中name这个字段中存有
'王','立','写',………………汉字开头的信息
现在要在页面上进行搜索,输入的关键字若是w,则找出w开头的拼音的信息,如:王,望………………
请问如何实现??

解决方案 »

  1.   

    up up up up up
      

  2.   

    这个问题有些麻烦啊,不过如果楼主愿意可以添加一个字段,如FindCode,可以在保存NAME的时候把这个字段的生成一个速查编码,然后根据速查编码来查询。
      

  3.   

    这个是可以将得到速查编码的存储过程 如 中国人 可以得到 ZGR
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO
    ALTER   proc LOG_FindCode
    @strName nvarchar(20), 
    @strFindCode nvarchar(20) output
    as 
    begin 
    declare @word nchar(1),@PY nvarchar(4000) 
    set @PY='' 
    while len(@strName)>0 
    begin 
    set @word=left(@strName,1) 
    set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901 
    then (select top 1 PY from ( 
    select 'A' as PY,N'驁' as word 
    union all select 'B',N'簿' 
    union all select 'C',N'錯' 
    union all select 'D',N'鵽' 
    union all select 'E',N'樲' 
    union all select 'F',N'鰒' 
    union all select 'G',N'腂' 
    union all select 'H',N'夻' 
    union all select 'J',N'攈' 
    union all select 'K',N'穒' 
    union all select 'L',N'鱳' 
    union all select 'M',N'旀' 
    union all select 'N',N'桛' 
    union all select 'O',N'漚' 
    union all select 'P',N'曝' 
    union all select 'Q',N'囕' 
    union all select 'R',N'鶸' 
    union all select 'S',N'蜶' 
    union all select 'T',N'籜' 
    union all select 'W',N'鶩' 
    union all select 'X',N'鑂' 
    union all select 'Y',N'韻' 
    union all select 'Z',N'咗' 
    ) T 
    where word>=@word collate Chinese_PRC_CS_AS_KS_WS 
    order by PY ASC) else @word end) 
    set @strName=right(@strName,len(@strName)-1) 
    end 
    set @strFindCode=@PY 
    end
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
    这个是方法,只需要传进去字符串就可以得到速查编码了
    public string GetFindCode(string strName)
    {
    ClassDataBase.Components.Database data=new ClassDataBase.Components.Database();
    SqlParameter[] prams=
    {
    data.MakeInParam("@strName",SqlDbType.VarChar,20,strName),
    data.MakeOutParam("@strFindCode",SqlDbType.VarChar,20)
    };
    data.RunProc("LOG_FindCode",prams);
    return prams[1].Value.ToString();
    }
      

  4.   

    贴主加分吧!先建一个自定义函数:
    create function FuncGetFirstPY(@str nvarchar(4000))
    returns nvarchar(4000)
    as
    begin
    declare @word nchar(1),@PY nvarchar(4000)
    set @PY=''
    while len(@str)>0
    begin
    set @word=left(@str,1)
    --如果非汉字字符,返回原字符
    set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
    then (select top 1 PY from (
    select 'A' as PY,N'驁' as word
    union all select 'B',N'簿'
    union all select 'C',N'錯'
    union all select 'D',N'鵽'
    union all select 'E',N'樲'
    union all select 'F',N'鰒'
    union all select 'G',N'腂'
    union all select 'H',N'夻'
    union all select 'J',N'攈'
    union all select 'K',N'穒'
    union all select 'L',N'鱳'
    union all select 'M',N'旀'
    union all select 'N',N'桛'
    union all select 'O',N'漚'
    union all select 'P',N'曝'
    union all select 'Q',N'囕'
    union all select 'R',N'鶸'
    union all select 'S',N'蜶'
    union all select 'T',N'籜'
    union all select 'W',N'鶩'
    union all select 'X',N'鑂'
    union all select 'Y',N'韻'
    union all select 'Z',N'咗'
    ) T 
    where word>=@word collate Chinese_PRC_CS_AS_KS_WS 
    order by PY ASC) else @word end)
    set @str=right(@str,len(@str)-1)
    end
    return @PY
    end/***********************************************************/
    调用示例
    /***********************************************************/
    表结构:
    CREATE TABLE [dbo].[PinYing] (
    [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [old] [int] NULL 
    ) ON [PRIMARY]数据:
    name     old
    王立平   23
    立立平   24
    写立平   25
    陈立平   26
    望立平   27
    汪立平   28
    长立平   29
    江立平   30
    黄立平   31
    河立平   32测试结果:
    name     old
    王立平   23
    望立平   27
    汪立平   28调用调例:
    select * from PinYing where dbo.FuncGetFirstPY(substring(name,1,1))='W'
      

  5.   

    在SQL里面不是有默认的排序方法吗? 楼主可以看看http://www.daima.com.cn/Info/4/Info39295/