不懂SQL,只会简单的查询 添加 删除 修改,现在需要一个拼音首字母查询的功能,上面的代码是在论坛找到的。希望可以逐句注释

解决方案 »

  1.   

    create function   f_GetPy(@str   nvarchar(4000)) 
    returns   nvarchar(4000) 
    as 
    begin 
    declare   @strlen   int,@re   nvarchar(4000) --就是定义了一个表变量 @t -- 然后把文字和对应的拼音首字母插入到@t中
    declare   @t   table(chr   nchar(1)   collate   Chinese_PRC_CI_AS,letter   nchar(1)) 
    insert   into   @t(chr,letter) 
        select   '吖 ', 'A '   union   all   select   '八 ', 'B '   union   all 
        select   '嚓 ', 'C '   union   all   select   '咑 ', 'D '   union   all 
        select   '妸 ', 'E '   union   all   select   '发 ', 'F '   union   all 
        select   '旮 ', 'G '   union   all   select   '铪 ', 'H '   union   all 
        select   '丌 ', 'J '   union   all   select   '咔 ', 'K '   union   all 
        select   '垃 ', 'L '   union   all   select   '呒 ', 'M '   union   all 
        select   '拏 ', 'N '   union   all   select   '噢 ', 'O '   union   all 
        select   '妑 ', 'P '   union   all   select   '七 ', 'Q '   union   all 
        select   '呥 ', 'R '   union   all   select   '仨 ', 'S '   union   all 
        select   '他 ', 'T '   union   all   select   '屲 ', 'W '   union   all 
        select   '夕 ', 'X '   union   all   select   '丫 ', 'Y '   union   all 
        select   '帀 ', 'Z ' 
        
        --计算字符串的长度
        select   @strlen=len(@str),@re= ' ' 
        
        --长度大于0
        while   @strlen> 0 
        begin 
            --找出某个汉字的拼音首字母
            select   top   1   @re=letter+@re,@strlen=@strlen-1 
                from   @t   a   where   chr <=substring(@str,@strlen,1) 
                order   by   chr   desc 
            
            --取出下一个字符,字符长度减去1   
            if   @@rowcount=0 
                select   @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1 
        end 
        return(@re) 
    end 
      

  2.   

    我只会这种程度create function   f_GetPy(@str   nvarchar(4000)) 
    returns   nvarchar(4000) 
    as 
    begin 
    declare   @strlen   int,@re   nvarchar(4000) --定义变量存放数据
    declare   @t   table(chr   nchar(1)   collate   Chinese_PRC_CI_AS,letter   nchar(1)) --定义一个表变量,用于存放一个字典表,Chinese_PRC_CI_AS这是排序规则,不知道的话暂时可以不理。
    insert   into   @t(chr,letter) --下面这对是插入字典数据
        select   '吖 ', 'A '   union   all   select   '八 ', 'B '   union   all 
        select   '嚓 ', 'C '   union   all   select   '咑 ', 'D '   union   all 
        select   '妸 ', 'E '   union   all   select   '发 ', 'F '   union   all 
        select   '旮 ', 'G '   union   all   select   '铪 ', 'H '   union   all 
        select   '丌 ', 'J '   union   all   select   '咔 ', 'K '   union   all 
        select   '垃 ', 'L '   union   all   select   '呒 ', 'M '   union   all 
        select   '拏 ', 'N '   union   all   select   '噢 ', 'O '   union   all 
        select   '妑 ', 'P '   union   all   select   '七 ', 'Q '   union   all 
        select   '呥 ', 'R '   union   all   select   '仨 ', 'S '   union   all 
        select   '他 ', 'T '   union   all   select   '屲 ', 'W '   union   all 
        select   '夕 ', 'X '   union   all   select   '丫 ', 'Y '   union   all 
        select   '帀 ', 'Z ' 
        select   @strlen=len(@str),@re= ' ' --初始化
        while   @strlen> 0 --如果传入的字符串没有便利完毕,继续
        begin 
            select   top   1   @re=letter+@re,@strlen=@strlen-1 --选出第一个字符,用letter替换chr的值
                from   @t   a   where   chr <=substring(@str,@strlen,1) 
                order   by   chr   desc 
            if   @@rowcount=0 --如果没错误,把已经遍历的字符去掉,遍历下一个字符
                select   @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1 
        end 
        return(@re) 
    end 
      

  3.   

    这不是个取助记码的标量值函数么?http://blog.csdn.net/yole_grise/article/details/14122895
      

  4.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?
      

  5.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢
      

  6.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以
      

  7.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以哦,那还是这个sql 的函数简单,其实这个select 语句就可以实现你的功能,因为他只是判断,输入的第一个汉字的首拼音是否是 Z
      

  8.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以哦,那还是这个sql 的函数简单,其实这个select 语句就可以实现你的功能,因为他只是判断,输入的第一个汉字的首拼音是否是 Z
    光写这句就可以?left后面怎么替换,我试了半天都不行。。所以才研究这段函数,没想到更难了
    假设 我现在有个表叫语文题,有个字段叫题目。如何用那句话替换
      

  9.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以哦,那还是这个sql 的函数简单,其实这个select 语句就可以实现你的功能,因为他只是判断,输入的第一个汉字的首拼音是否是 Z
    光写这句就可以?left后面怎么替换,我试了半天都不行。。所以才研究这段函数,没想到更难了
    假设 我现在有个表叫语文题,有个字段叫题目。如何用那句话替换
    select  * from  [语文题] where left(dbo.f_GetPy(题目),1)='Z' 
      

  10.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以哦,那还是这个sql 的函数简单,其实这个select 语句就可以实现你的功能,因为他只是判断,输入的第一个汉字的首拼音是否是 Z
    光写这句就可以?left后面怎么替换,我试了半天都不行。。所以才研究这段函数,没想到更难了
    假设 我现在有个表叫语文题,有个字段叫题目。如何用那句话替换
    select  * from  [语文题] where left(dbo.f_GetPy(题目),1)='Z' 
    。。还有那个 f_getpy 那不是还需要这个函数。。我还以为不用这个函数就行呢。。有没有不写函数的方法啊?整个 BETWEEN 还只能查找英文
      

  11.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以哦,那还是这个sql 的函数简单,其实这个select 语句就可以实现你的功能,因为他只是判断,输入的第一个汉字的首拼音是否是 Z
    光写这句就可以?left后面怎么替换,我试了半天都不行。。所以才研究这段函数,没想到更难了
    假设 我现在有个表叫语文题,有个字段叫题目。如何用那句话替换
    select  * from  [语文题] where left(dbo.f_GetPy(题目),1)='Z' 
    。。还有那个 f_getpy 那不是还需要这个函数。。我还以为不用这个函数就行呢。。有没有不写函数的方法啊?整个 BETWEEN 还只能查找英文这种中文处理,是比较麻烦的,得要这个函数的,不然写的也不简单呀
      

  12.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以哦,那还是这个sql 的函数简单,其实这个select 语句就可以实现你的功能,因为他只是判断,输入的第一个汉字的首拼音是否是 Z
    光写这句就可以?left后面怎么替换,我试了半天都不行。。所以才研究这段函数,没想到更难了
    假设 我现在有个表叫语文题,有个字段叫题目。如何用那句话替换
    select  * from  [语文题] where left(dbo.f_GetPy(题目),1)='Z' 
    。。还有那个 f_getpy 那不是还需要这个函数。。我还以为不用这个函数就行呢。。有没有不写函数的方法啊?整个 BETWEEN 还只能查找英文这种中文处理,是比较麻烦的,得要这个函数的,不然写的也不简单呀
    我选择放弃了
      

  13.   


    我以为这是一个 各种转换的代码
    本想用其他语言 写个类似的函数,然后执行下面这句话就可以直接查询了
    select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z'但是我看了 你简单的注释后 好像和我想的不一样,这段代码能不能转成其他语言呢?这个函数就是实现获取pactname的每个汉字的首字母,但是你的这个select语句,只需要判断如果返回的字符串的第一个字母是 Z 就可以了,也就是比如 第一个汉字的首字母是Z 就可以了。select  * from  [pactinfo] where left(dbo.f_GetPy(pactname),1)='Z' 这个语句,看着也没什么问题,你要转化为什么语言呢嗯 我的想法就是用户只输入 第一个汉字的首字母,就可以显示出来需要的记录。
    本以为 那函数是用来转换的,现在看来不是那么简单啊。。
    转成vb或c都可以哦,那还是这个sql 的函数简单,其实这个select 语句就可以实现你的功能,因为他只是判断,输入的第一个汉字的首拼音是否是 Z
    光写这句就可以?left后面怎么替换,我试了半天都不行。。所以才研究这段函数,没想到更难了
    假设 我现在有个表叫语文题,有个字段叫题目。如何用那句话替换
    select  * from  [语文题] where left(dbo.f_GetPy(题目),1)='Z' 
    。。还有那个 f_getpy 那不是还需要这个函数。。我还以为不用这个函数就行呢。。有没有不写函数的方法啊?整个 BETWEEN 还只能查找英文这种中文处理,是比较麻烦的,得要这个函数的,不然写的也不简单呀
    我选择放弃了呵呵,给你找了一个vb的函数,你参考一下:vb 获取汉字拼音的首字母
    http://zhidao.baidu.com/link?url=lGI8J2zSZuyJxqiAFHHBZJTMi4-aYqfYkfby48Pji_aClRbrxuOvqC59lgbdMpW_yJqDQiRWaUgGR8VxgGUflq