2012-04-24 4 views
0

두 테이블이 있습니다. 하위 문자열 함수를 사용하여이 테이블을 조인해야합니다. 나는 이런 것을 시도했다. 그러나 그것은 ...선택한 텍스트에만 참여할 수 있습니까?

Table01

(작동하지 않는)
ID NameStreet 
1 Julian Assange 100 Majestic street, Toronto 
2 Brad Pit 200 Loaden Blvd, Toronto 
3 Allen Sunderland 9, Unit 2, Janet Street, BC 
4 Julian Assange 50 Majectic street, Toronto 

Table02

ID Name 
1 Julian Assange 
2 Allen Sunderland 
3 Julian Assange 

현재 쿼리

SELECT t1.* 
FROM Table01 t1 
JOIN Table02 t2 
ON t2.Name = SUBSTRING(t1.NameStreet, 0, CHARINDEX(t2.Name, t1.NameStreet)) 

기대 결과를 작동하지 : -

1 Julian Assange 100 Majestic street, Toronto 
3 Allen Sunderland 9, Unit 2, Janet Street, BC 
4 Julian Assange 50 Majectic street, Toronto 
+0

단어 나 첫 번째 문자에만 일치 시키시겠습니까? 즉, 'NameStreet'가'Allen Sunderlander '(또는 무엇이든)로 시작한다면 무엇을 반환할까요? –

+0

X-Zero. 정확히 일치해야합니다. – user1327064

+0

우리가주의해야 할 다른 것들은 무엇입니까? 이름이 여러 개인 사람 (예 : Allen Sunderland Forks)이 있습니까? 이름이 항상 같은 방식으로 입력됩니다. 숫자가 아닌 시작 부분이있는 주소는 어떻게됩니까? 이름의 끝과 주소의 시작을 어떻게 감지 할 수 있습니까? 이것은 구현하기가 불가능할 수도 있습니다 ... (어쨌든 왜 이것을하고 있습니까? 정규화되고 현명한 표현에 액세스 할 수 없습니까?) –

답변

0

나는 당신의 쿼리에서 당신이 원하는 생각 :

on t2.Name = LEFT(t1.NameStreet, (charindex(' ', t1.NameStreet)-1)) 

편집

이 일을합니까?

on t2.Name = LEFT(t1.NameStreet, Len(t2.Name)) 
+0

Marc : 공백 문자가 expressionToFind에서 작동하지 않습니다. 이 이름은 'Julian Assange'와 같을 수 없습니다. – user1327064

+0

나는 생각하고있는 방식을 좋아하지만, 일치시키려는 열에 공백이 있으면 문제가 발생할 것입니다. 또한 문자열에서 숫자를 뺄 수 있다는 것에 조금 놀랐습니다. CHARINDEX() 함수를 사용해야합니까? –

+0

귀하의 예는 그 케이스를 설명하지 않습니다 – Marc

관련 문제