获取输入汉子的首字母大写字符串
在进行数据库录入操作中,有时,我们需要输入某字段的汉语名称,同时,为了需要还回去编辑其英文首字符,为此出现了以下的代码:
1 功能:根据返回所有汉字的首字母----存储过程中。
2 调用:select [dbo].[fun_getPY](字段名) as zm from 表名
3 */
4 Create function fun_getPY
5 (
6 @str nvarchar(4000)
7 )
8 returns nvarchar(4000)
9 AS
10 BEGIN
11 DECLARE @word NCHAR(1),@PY NVARCHAR(4000)
12 SET @PY=''
13 WHILE len(@str)>0
14 BEGIN
15 SET @word=left(@str,1)
16 --如果非汉字字符,返回原字符
17 SET @PY=@PY+(CASE WHEN UNICODE(@word)BETWEEN 19968 AND 19968+20901
18 THEN (SELECT TOP 1 PY FROM(
19 SELECT 'A' as PY,N'驁' as word
20 UNION ALL SELECT 'B',N'簿'
21 UNION ALL SELECT 'C',N'錯'
22 UNION ALL SELECT 'D',N'鵽'
23 UNION ALL SELECT 'E',N'樲'
24 UNION ALL SELECT 'F',N'鰒'
25 UNION ALL SELECT 'G',N'腂'
26 UNION ALL SELECT 'H',N'夻'
27 UNION ALL SELECT 'J',N'攈'
28 UNION ALL SELECT 'K',N'穒'
29 UNION ALL SELECT 'L',N'鱳'
30 UNION ALL SELECT 'M',N'旀'
31 UNION ALL SELECT 'N',N'桛'
32 UNION ALL SELECT 'O',N'漚'
33 UNION ALL SELECT 'P',N'曝'
34 UNION ALL SELECT 'Q',N'囕'
35 UNION ALL SELECT 'R',N'鶸'
36 UNION ALL SELECT 'S',N'蜶'
37 UNION ALL SELECT 'T',N'籜'
38 UNION ALL SELECT 'W',N'鶩'
39 UNION ALL SELECT 'X',N'鑂'
40 UNION ALL SELECT 'Y',N'韻'
41 UNION ALL SELECT 'Z',N'咗'
42 )T
43 WHERE word>=@word COLLATE Chinese_PRC_CS_AS_KS_WS
44 ORDER BY PY ASC)ELSE @word END)
45 SET @str=RIGHT(@str,LEN(@str)-1)
46 END
47 RETURN UPPER(@PY)
48 END
49 GO
50
51
52
53 程序中:
54
55 #region 汉字获得其大写首字母方法。
56 /// <summary>
57 /// 判断是否为汉字
58 /// </summary>
59 /// <param name="chrStr">待检测字符串</param>
60 /// <returns>是汉字返回true</returns>
61 public bool IsChineseCharacters(string chrStr)
62 {
63 Regex CheckStr = new Regex("[/u4e00-/u9fa5]");
64 return CheckStr.IsMatch(chrStr);
65 }
66
67 /// <summary>
68 /// 得到每个汉字的字首拼音码字母(大写)
69 /// </summary>
70 /// <param name="chrStr">输入字符串</param>
71 /// <returns>返回结果</returns>
72 public string GetHeadCharacter(string chrStr)
73 {
74 string strHeadString = string.Empty;
75
76 System.Text.Encoding gb = System.Text.Encoding.GetEncoding("gb2312");
77 for (int i = 0; i < chrStr.Length; i++)
78 {
79 //检测该字符是否为汉字
80 //if (!IsChineseCharacters(chrStr.Substring(i, 1)))
81 //{
82 // strHeadString += chrStr.Substring(i, 1);
83 // continue;
84 //}
85
86 byte[] bytes = gb.GetBytes(chrStr.Substring(i, 1));
87 string lowCode = System.Convert.ToString(bytes[0] - 0xA0, 16);
88 string hightCode = System.Convert.ToString(bytes[1] - 0xA0, 16);
89 int nCode = Convert.ToUInt16(lowCode, 16) * 100 + Convert.ToUInt16(hightCode, 16); //得到区位码
90 strHeadString += FirstLetter(nCode);
91 }
92 return strHeadString;
93 }
94
95 /// <summary>
96 /// 通过汉字区位码得到其首字母(大写)
97 /// </summary>
98 /// <param name="nCode">汉字编码</param>
99 /// <returns></returns>
100 public string FirstLetter(int nCode)
101 {
102 if (nCode >= 1601 && nCode < 1637) return "A";
103 if (nCode >= 1637 && nCode < 1833) return "B";
104 if (nCode >= 1833 && nCode < 2078) return "C";
105 if (nCode >= 2078 && nCode < 2274) return "D";
106 if (nCode >= 2274 && nCode < 2302) return "E";
107 if (nCode >= 2302 && nCode < 2433) return "F";
108 if (nCode >= 2433 && nCode < 2594) return "G";
109 if (nCode >= 2594 && nCode < 2787) return "H";
110 if (nCode >= 2787 && nCode < 3106) return "J";
111 if (nCode >= 3106 && nCode < 3212) return "K";
112 if (nCode >= 3212 && nCode < 3472) return "L";
113 if (nCode >= 3472 && nCode < 3635) return "M";
114 if (nCode >= 3635 && nCode < 3722) return "N";
115 if (nCode >= 3722 && nCode < 3730) return "O";
116 if (nCode >= 3730 && nCode < 3858) return "P";
117 if (nCode >= 3858 && nCode < 4027) return "Q";
118 if (nCode >= 4027 && nCode < 4086) return "R";
119 if (nCode >= 4086 && nCode < 4390) return "S";
120 if (nCode >= 4390 && nCode < 4558) return "T";
121 if (nCode >= 4558 && nCode < 4684) return "W";
122 if (nCode >= 4684 && nCode < 4925) return "X";
123 if (nCode >= 4925 && nCode < 5249) return "Y";
124 if (nCode >= 5249 && nCode < 5590) return "Z";
125 return "";
126 }
127 #endregion
第一次开始总结博客,希望大家支持鼓励。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号