• 近音搜索,比较输入Z就可以搜索到拼音Z开头的汉字,搜索"浙江",只要输入"ZJ"就可以了



    相关算法如下:
    有兴趣可以测试一下,希望能给你带来帮助
     using System;
     
    using System.Text;
     
    using System.IO;
     
    namespace ts{
     
    class test{
     
    private static string[] startChars = {"""""","","","","","","","","","","","","","",
                  
    "","""","","","","","","",""}
    ;
       
    private static string[] endChars = {"""""","","","","","","","","","","","","","",
                   
    "","""","","","","","","",""}
    ;
     
       
    /// <summary>
       
    /// 根据字符和对应的中文字符,转成SQL查询条件
       
    /// </summary>
       
    /// <param name="cChar">要转化的字符,[A-Z]</param>
       
    /// <param name="strFieldName">条件左值</param>
       
    /// <returns>SQL条件</returns>
       
    /// <remarks> Sxf 2001-1-4 ***** JY 2002-1-4 </remarks>

       public static string GetCharCondition(char cChar, string strFieldName)
       
    {
        
    string strWord;
        
    int Index = (int)(char.ToUpper(cChar)) - (int)'A';
        
    if (Index >= 0 && Index < 26)
         strWord 
    = startChars[Index];
        
    else
         strWord 
    = startChars[0];
        
    //            return string.Format("(({0}>='{1}' AND {0}<'[') OR ({0} >= '{3}' AND {0} < '{{') OR {0}>='{2}')", 
        
    //                strFieldName, char.ToUpper(cChar), strWord, char.ToLower(cChar));
        return string.Format("(({0} >= '{3}' AND {0} <= 'zzzzzzzz') OR {0}>='{2}')"
         strFieldName, 
    char.ToUpper(cChar), strWord, char.ToLower(cChar));
       }

     
             
    /// <summary>
             
    /// 将指定字段值的每个字符分割,这样可以生成同音查询的SQL
             
    /// </summary>
             
    /// <param name="fieldName">字段名</param>
             
    /// <param name="fieldValue">字段值</param>
             
    /// <returns>生成的可以进行同音查询的SQL</returns>

       public static string GetCharFullCondition(string fieldName, string fieldValue)
       
    {
        StringBuilder sql 
    = new StringBuilder(1024);
        
    int i = 1;
        
    foreach (char c in fieldValue)
        
    {
         
    if (i > 1)
          sql.Append(
    " AND ");
         
    int index = (int)(char.ToUpper(c)) - (int)'A';
         
    string startWord, endWord;
         
    if (index >= 0 && index < 26)
         
    {
          startWord 
    = startChars[index];
          endWord 
    = endChars[index];
         }

         
    else
         
    {
          startWord 
    = startChars[0];
          endWord 
    = endChars[0];
         }

         
    string subStr = String.Format("SUBSTRING({0}, {1}, {2})", fieldName, i, 1);
         sql.AppendFormat(
    "({0} BETWEEN '{1}' AND '{2}')", subStr, startWord, endWord);
         
    ++i;
        }

     
        
    return sql.ToString();
       }

     }

     }
     
    我这个是基于SqlServer2000中的自定义函数的,如下:

    Create function 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

    调用方法是:

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using Microsoft.ApplicationBlocks.Data;

    namespace Function
    {
    public class 生成助记码
    {
    /// <summary>
    /// 根据汉字获取拼音首码
    /// </summary>
    /// <param name="Chinese"></param>
    /// <returns></returns>
    public static string GetPY(string Chinese)
    {
    SqlParameter [] param = new SqlParameter[1];
    param[0] = new SqlParameter("@中文",Chinese);

    try
    {
    object objPingYing = SqlHelper.ExecuteScalar(数据连接字串,CommandType.Text,"select dbo.GetPY(@中文)",param);
    if (objPingYing==null)
    {
    return string.Empty;
    }
    else
    {
    return objPingYing.ToString();
    }
    }
    catch
    {
    return string.Empty;
    }
    }

    }

  • 相关阅读:
    HTML 表单和表格
    HTML 多媒体
    k8s-pod健康检查_探针
    中医穴位小知识
    k8s-yaml定义pod属性说明
    k8s-yaml格式的pod定义文件完整内容
    k8s-redis集群属性简单解释
    ls 的顺序与倒序排列
    K8S kind几种类型
    openssl自签证书
  • 原文地址:https://www.cnblogs.com/luluping/p/1530523.html
Copyright © 2020-2023  润新知