asp.net 한자의 병음 알파벳에 따라 데이터베이스 검색 (LINQ 호출 방법 첨부)

3002 단어
방법1: 모든 기록을 먼저 조회한 다음에 논리층에서 병음 자모로 바뀐 후에 조회하면 분명히 바보가 이렇게 할 것이다.
방법2: 검색이 필요한 표에 검색된 필드의 내용에 대응하는 병음을 저장하는 데 사용할 필드를 추가하고 검색할 때 이 두 필드를 동시에 조회한다. 이런 방법은 가능하지만 데이터베이스 저장의 크기를 증가시킬 수 있다.
방법3: 데이터베이스에 함수를 만들어 질의문을 실행할 때 이 함수를 통해 검색을 전환합니다. 함수는 다음과 같습니다.
 
  
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'�e'
UNION ALL SELECT 'D',N'�z'
UNION ALL SELECT 'E',N'��'
UNION ALL SELECT 'F',N'�v'
UNION ALL SELECT 'G',N'�B'
UNION ALL SELECT 'H',N'��'
UNION ALL SELECT 'J',N'�h'
UNION ALL SELECT 'K',N'�i'
UNION ALL SELECT 'L',N'�w'
UNION ALL SELECT 'M',N'��'
UNION ALL SELECT 'N',N'��'
UNION ALL SELECT 'O',N'�a'
UNION ALL SELECT 'P',N' '
UNION ALL SELECT 'Q',N'��'
UNION ALL SELECT 'R',N'�U'
UNION ALL SELECT 'S',N'�R'
UNION ALL SELECT 'T',N'�X'
UNION ALL SELECT 'W',N'�F'
UNION ALL SELECT 'X',N'�R'
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;

좋은 웹페이지 즐겨찾기