关键词搜索

源码搜索 ×
×

SQL Server中实现汉字首字母和把汉字转成拼音的方法。

发布2018-07-25浏览3801次

详情内容

1 建表保存拼音、拼音首字母、和汉字的对照表。

脚本如下:

CREATE TABLE [dbo].[SYS_ChinesePY](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [PYFIRST] [char](1) NULL,
    [PYALL] [varchar](50) NULL,
    [WORD] [nvarchar](1) NULL,
 CONSTRAINT [PK_SYS_ChinesePY] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

可以从这里下载很全的拼音对照表的excel数据进行导入

https://download.csdn.net/download/postfxj/10563056

 

2 实现任意文字转拼音和首字母的收集(c#方法,如果不想导入也可以用下面的方法自行收集)。

2.1先下载Mcrosoft visual studio international pack并安装在任意一台电脑上

2.2 进C:\Program Files (x86)\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library文件夹复制

chnCharInfo.dll文件到vs开发工具的电脑上,在项目中引用该文件。

2.3 相关取拼音的类文件如下

此类中一定要引用

using Microsoft.International.Converters.PinYinConverter; 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Microsoft.International.Converters.PinYinConverter;
  5. namespace POS
  6. {
  7. class CS_Chinese
  8. {
  9. /// 获得单个字符的拼音
  10. /// </summary>
  11. /// <param name="c"></param>
  12. /// <returns></returns>
  13. public static string GetPinYin(char c)
  14. {
  15. ChineseChar cc = new ChineseChar(c);
  16. string str = cc.Pinyins[0]; //多音字只取第一个
  17. return str.Substring(0, str.Length - 1); //去掉最后的声调
  18. }
  19. /// 获得一个字符串的拼音
  20. /// </summary>
  21. /// <param name="str"></param>
  22. /// <returns></returns>
  23. /// /// <summary>
  24. public static string GetPinYin(string str)
  25. {
  26. StringBuilder sb = new StringBuilder();
  27. foreach (char item in str)
  28. {
  29. //判断是不是汉字,如果不是原字符返回
  30. if (ChineseChar.IsValidChar(item))
  31. {
  32. sb.Append(GetPinYin(item));
  33. }
  34. else
  35. {
  36. sb.Append(item);
  37. }
  38. }
  39. return sb.ToString();
  40. }
  41. }
  42. }

2.4 用上面的方法可以收集汉字来把数据插入到对照表中

以下是我以任何表中的某个栏位来收集对像进行收集的方法的样例。

  1. private void btnSJPY_Click(object sender, EventArgs e)
  2. {
  3. waiting w = new waiting();
  4. try
  5. {
  6. w.Show();
  7. if (dgvData.Rows.Count > 0)
  8. for (int i = 0; i < dgvData.Rows.Count; i++)
  9. {
  10. string s = dgvData.Rows[i].Cells[txtField.Text].Value.ToString();
  11. for (int j = 0; j < s.Length; j++)
  12. {
  13. string sWord = s.Substring(j, 1);
  14. string sGBWord = ConvertSCTC.TCTOSCConvert(sWord);//簡體字
  15. string sBIGWord = ConvertSCTC.SCTOTCConvert(sGBWord);//繁體字
  16. string sGBPY = CS_Chinese.GetPinYin(sGBWord);
  17. string sBIGPY = CS_Chinese.GetPinYin(sBIGWord);
  18. if (sGBWord != sGBPY)
  19. {
  20. string sql = "Select * FROM SYS_ChinesePY WHERE Word=N'" + sGBWord + "'";
  21. bool isData = WEBPOS.IsExit(BASEINFO.DESEncrypt(sql));
  22. if (!WEBPOS.IsExit(BASEINFO.DESEncrypt(sql)))
  23. {
  24. sql = "insert into SYS_ChinesePY(PYFIRST,PYALL,WORD) VALUES(N'" + sGBPY.Substring (0,1) +"',N'" + sGBPY + "',N'" + sGBWord + "')";
  25. WEBPOS.SQLcmd(BASEINFO.DESEncrypt(sql));
  26. }
  27. }
  28. if (sBIGWord != sBIGPY)
  29. {
  30. string sql = "Select * FROM SYS_ChinesePY WHERE Word=N'" + sBIGWord + "'";
  31. bool isData = WEBPOS.IsExit(BASEINFO.DESEncrypt(sql));
  32. if (!WEBPOS.IsExit(BASEINFO.DESEncrypt(sql)))
  33. {
  34. sql = "insert into SYS_ChinesePY(PYFIRST,PYALL,WORD) VALUES(N'" + sBIGPY.Substring(0, 1) + "',N'" + sBIGPY + "',N'" + sBIGWord + "')";
  35. WEBPOS.SQLcmd(BASEINFO.DESEncrypt(sql));
  36. }
  37. }
  38. }
  39. }
  40. }
  41. finally
  42. {
  43. w.Close();
  44. }
  45. }

3  SQL Server中实现翻译的方法

创建如下标量值函数:

  1. CREATE FUNCTION [dbo].[procGetPY]
  2. (
  3. @str NVARCHAR(4000)
  4. )
  5. /*
  6. select dbo. procGetPYFirstLetter ('中國')
  7. */
  8. RETURNS NVARCHAR(4000)
  9. --WITH ENCRYPTION
  10. AS
  11. BEGIN
  12. DECLARE @WORD NCHAR(1),@PY NVARCHAR(4000)
  13. SET @PY=''
  14. WHILE LEN(@STR)>0
  15. BEGIN
  16. SET @WORD=LEFT(@STR,1)
  17. --如果非漢字字符﹐返回原字符
  18. SET @PY=@PY+' '+RTRIM((CASE WHEN UNICODE(@WORD) BETWEEN 19968 AND 19968+20901
  19. THEN (
  20. SELECT TOP 1 PY
  21. FROM
  22. (
  23. select PYALL PY,WORD
  24. from sys_chinesePY
  25. ) T
  26. WHERE WORD=@WORD
  27. ORDER BY PY ASC
  28. )
  29. ELSE @WORD
  30. END) )
  31. SET @STR=RIGHT(@STR,LEN(@STR)-1)
  32. END
  33. RETURN @PY
  34. END

调用方法:select dbo. procGetPYFirstLetter ('我爱你哟')  

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载