hur.cn - 华软网

 热门搜索

如何得到一串汉字的每一个汉字首拼音码

  作者:未知    来源:网络    更新时间:2018/6/13
如何得到一串汉字的每一个汉字首拼音码
------华软网友回答------
我发一份给你邮箱,你有什么好的,传我一份
------华软网友回复------
Create  function fun_getPY 
 ( 
    @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

------华软网友回复------
给你一个函数:

//xuejun,  19990821
//Function name   : uf_GetFirstLetter
//Used to         : 返回给定汉字串的首字母串,即声母串
//Input Arguments : as_InputString - string , 给定的汉字串
//Return Value    : ls_ReturnString - String , 给定的汉字串的声母串,一律为小写
//Notice          : 1. 此方法基于汉字的国标汉字库区位编码的有效性,不符合此编码的系统此函数无效!
//                  2. 若汉字串含有非汉字字符,如图形符号或ASCII码,则这些非汉字字符将保持不变.
//Sample          : ls_rtn = f_Get_First_Letter("中华人民共和国") 
//ls_rtn will be  : zhrmghg

//Scripts:
Char lc_FirstLetter[23] //存放国标一级汉字不同读音的起始区位码对应读音
String ls_ch //临时单元
String ls_SecondSecTable //存放所有国标二级汉字读音
String ls_ReturnStr //返回串
Integer  li_SecPosValue[23] //存放国标一级汉字不同读音的起始区位码
Integer  i , j 
Integer  li_SectorCode //汉字区码
Integer  li_PositionCode //汉字位码
Integer  li_SecPosCode //汉字区位码
Integer  li_offset //二级字库偏移量

//Set initial value
li_SecPosValue[] = {1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722,3730,3858,4027,4086,4390,4558,4684,4925,5249 }
lc_FirstLetter[] = {"A", "B","C","D","E","F","G","H","J","K","L","M","N","O","P","Q","R","S","T","W","X","Y","Z"}

------华软网友回复------
ls_SecondSecTable = "CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHYLYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWYWSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZPMGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY
------华软网友回复------
[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSBRSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG
------华软网友回复------
[DJLSLYGKDZPZXJYYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQHJGYKHEZNMSHRP[
------华软网友回复------

//Get it !
ls_ReturnStr = ""    
For i = 1 to Len(as_InputString) //依次处理as_InputString中每个字符
ls_ch = Mid(as_InputString , i , 1)      
If Asc(ls_ch) < 128  then //非汉字
ls_returnStr = ls_returnStr + ls_ch //不变
Else //是汉字
ls_ch = Mid(as_InputString , i , 2) //取出此汉字
li_SectorCode = Asc(Left(ls_ch, 1)) - 160 //区码
li_PositionCode = Asc(Right(ls_ch, 1)) - 160 //位码
li_SecPosCode = li_SectorCode * 100 +  li_PositionCode //区位码
If li_SecPosCode > 1600  and  li_SecPosCode < 5590   then //第一个字符
For j = 23 to 1 Step -1 //找声母
If li_SecPosCode >= li_SecPosValue[j] then
ls_returnStr = ls_returnStr +  lc_FirstLetter[j]
Exit
End if
Next
Else //第一个字符
li_offset = (li_SectorCode - 56 ) * 94 + li_PositionCode - 1 //计算偏移量
If li_offset >= 0  and li_offset <= 3007 then //二区汉字
ls_returnStr = ls_returnStr + Mid(ls_SecondSecTable, li_offset , 1) //取出此字声母
End if
End if
i = i+1 //指向下一个汉字
End if
Next //处理完毕

//Return result 
Return    lower( ls_returnStr ) //返回 as_InputString 的声母串

------华软网友回复------
mark      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。