您的位置:首页 > 数据库

(转) 根据拼音首字母检索数据库

2010-05-19 14:20 190 查看
1 在数据库中建立一个函数,在执行查询语句时通过此函数来转化搜索,函数如下:
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 

详细出处参考:http://www.jb51.net/article/23213.htm




2 在查询时调用些函数

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



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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: