zoukankan      html  css  js  c++  java
  • 根据拼音首字母搜索

    方法一:先查询出所有记录,然后在逻辑层转化为拼音首字母后查询,显然傻瓜才会这么做。 

    方法二:在需要搜索的表中添加一个字段用于存放被检索字段内容对应的拼音,在搜索的时候同时去查询这两个字段,这种方法可行,但会增加数据库存放的大小。 

    方法三:在数据库中建立一个函数,在执行查询语句时通过此函数来转化搜索,函数如下: 

    复制代码代码如下:

    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    -- ============================================= 
    -- Author: xoyozo 
    -- Create date: 2010-4-17 
    -- Description: 提供中文首字母 
    -- ============================================= 
    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 




    使用方法: 

    复制代码代码如下:

    select * from 表 where fun_getPY(字段) like N'%zgr%' 




    此方法是最快捷方便的,通过测试在文章表中搜索标题首字母,其耗时大约为不使用此函数搜索的 3 倍,相信部署在小数据量的项目中的成本是非常低的。 

    LINQ 方式操作 
    初学 LINQ 的朋友或许对 .dbml 文件不是很熟悉,数据库中的表可以直接拖动到 .dbml 的左侧,而存储过程、函数等可以直接拖到其右侧,然后就可以直接在逻辑使用了,下面是例子: 

    复制代码代码如下:

    DataClasses1DataContext db = new DataClasses1DataContext(); 
    var q = from d in db.Documents 
    where d.Title.Contains("zgr") || db.fun_getPY(d.Title).Contains("zgr") 
    select d; 
  • 相关阅读:
    Linux 脚本编写基础
    Centos7下修复 视频播放器(先 安装VLC视频播放器)
    用CentOS 7打造合适的科研环境
    Storm与Spark:谁才是我们的实时处理利器
    Nutch 问题杂记
    三、多线程基础-自旋_AQS_多线程上下文
    二、多线程基础-乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁
    一、多线程基础理论-概念_特性_分类_状态_线程池_线程数配置
    六、ibatis1.2.8查询性能优化,实现百万数据zip导出
    二十、oracle通过复合索引优化查询及不走索引的8种情况
  • 原文地址:https://www.cnblogs.com/newsouls/p/2659366.html
Copyright © 2011-2022 走看看