2012-01-26 5 views
0

"유사한"값을 쿼리하기 위해 LIKE보다 약간 나은 특수 연산자가 필요합니다.SQL Server Express : 비슷한 이름의 쿼리에 대해 LIKE보다 나은 점

시나리오 :
나는 학생들의 테이블을 가지고 있으며, 나는 수업 테이블을 가지고있다. 수업 테이블은 다른 소프트웨어에서 가져온 것이므로 StudentID 열은 가져온 행에서 null입니다. 따라서 사용자가 각 강의에 대해 적절한 학생 행을 수동으로 선택해야하며 StudentID 열을 채울 수 있으므로 올바르게 동기화됩니다. 두 테이블 모두 이름과 성을 포함하지만 대다수는 맞춤법 오류가 발생할 가능성이 큽니다.

행을 가져온 후 각 수업에 저장된 값과 이름이 "상위 5 위"인 학생 행의 이름을 사용자에게 표시하고 싶습니다. 사실 나는 가장 많이 비슷한 것부터 가장 유사한 것까지 내림차순으로 제시하고 싶습니다.

LIKE 연산자가 포함 된 쿼리는 특정 텍스트가 열에 존재해야하며 "유사성 점수"를 반환하지 않으므로이를 잘리지 않습니다.

미국 우체국이이 문제를 매우 잘 처리하고 있다는 것을 이해하고 있습니다. (기술이 아닌 기사에서) 사람들은 항상 이름과 철자 이름을 잘못 입력하지만 "비슷한 찾기"알고리즘은 매우 효과적입니다. .

알고리즘은 솔루션마다 다를 수 있습니다. 예를 들어 일부 알고리즘에서는 음성학을 고려하고 다른 사람들은 모음과 자음의 수를 고려하고 다른 사람들은 전화로 말하면 "T"가 "P"와 같다고 생각합니다.

모든 레코드를 내 앱 코드에로드하고 C#, VB.NET 등의 자체 알고리즘을 작성할 수는 있지만 성능을 포함한 많은 문제가 있습니다. 오히려 질의 내에서 이것을 수행하여 대안을 찾고자합니다.

SQL Server Express를 사용하고 있지만 솔루션이 다른 데이터베이스 플랫폼에도 적용됩니다.

답변

1

SQL Server는 SOUNDEX() 함수를 지원하지만, 적어도 영어 이외의 텍스트를 처리하는 경우에는 비슷한 소리를내는 이름과 잘 들리지 않는 경우에만 작동합니다. C# 또는 vb.net에서 함수를 작성하여 필요에 따라 적용 할 수있는 알고리즘을 쉽게 사용할 수 있으며 SQL Server에 스칼라 함수로 가져올 수 있습니다.

+0

"C#이나 vb.net에서 함수를 작성하여 사용자의 필요에 맞는 알고리즘을 쉽게 사용할 수 있으며 SQL Server에 스칼라 함수로 가져올 수 있습니다." 저 할 수 있어요? 굉장해! 내가 올바르게 이해하면 vb.net에 "MYSOUNDEX()"함수를 작성하여 서버에 저장하고 다른 SQL 함수처럼 사용할 수 있습니까? 어떻게해야 할 지 모르겠다. SQL Express에도 적용 되는가? 내가 너에게 옳은지 이해하고 있다면 지시 사항이있는 링크를 가르쳐 주시겠습니까? – PaulOTron2000

+0

시작을 위해 http://msdn.microsoft.com/en-us/library/w2kae45k(v=vs.100).aspx를 사용해보십시오. – Mithrandir

+0

그게 내 대답 인 것 같습니다. 고마워요! 그런데이 작은 맛있는 음식은 여러모로 편리 할 수 ​​있습니다! 그것은 슬라이스 저장 프로 시저 이후로 가장 좋습니다! – PaulOTron2000

1

SQL의 FREETEXT 당신을 위해 작동 할 수 있습니다 : 나는 이름을 어떻게하는지 잘되지 확신하지만

http://msdn.microsoft.com/en-us/library/ms176078.aspx

그것은, 시소러스에 대해 검색합니다. 그러나 매우 쉽게 구현할 수 있습니다.