zoukankan      html  css  js  c++  java
  • 近音搜索,比较输入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;
    }
    }

    }

  • 相关阅读:
    负载均衡算法(四)IP Hash负载均衡算法
    负载均衡算法(二)加权轮询负载均衡算法
    负载均衡算法(一)轮询负载均衡算法
    移动端媒体查询CSS3适配规则
    JavaScript中label语句的使用
    NODE简易综合应用服务器搭建
    ES6--不定参数
    ES6--默认参数表达式,参数变动
    node基础学习——http基础知识-02-http响应数据流
    node基础学习——http基础知识-01-客户单请求
  • 原文地址:https://www.cnblogs.com/luluping/p/1530523.html
Copyright © 2011-2022 走看看