2013-06-25 2 views
0

문자 사이에 올바른 텍스트를 가져 오는 데 문제가 있습니다. 현재 SUBSTRING 및 CHARINDEX를 사용하려고합니다. 문제는 데이터에 동일한 식별자가 포함되어 있다는 것입니다. 첫 번째 '\'와 두 번째 '\'사이에있는 텍스트를 원하고 다른 모든 텍스트는 제거하고 싶습니다. 텍스트 필드에는 고정 된 수의 문자가 없습니다.SQL 사이에 텍스트 가져 오기

도움을 주셔서 감사합니다.

Example 
1. Location\Georgia\Atlanta 
2. Country\USA\States\Minnesota 

Final Result 
1. Georgia 
2. USA 

내 현재 시도 나는 조엘의 의견에 동의

SUBSTRING(Source,CHARINDEX('\',Source),CHARINDEX('\',Source) - CHARINDEX('\',Source)) 
+2

열 내의 구분 된 텍스트는 악합니다. 이 정보에 대해 추가 열이나 추가 표가 필요한 것 같습니다. –

답변

1

마틴의 대답은,이 방법은 작동 매끄러운입니다하지만 대부분 세 번째 인수로 first normal form의 위반 생겼 그의 허풍이 얼마나 매끄러운가를 보여줍니다.

WITH T(Source) AS 
(
SELECT 'Location\Georgia\Atlanta' UNION 
SELECT 'Country\USA\States\Minnesota' 
) 
SELECT *, SUBSTRING(Source,CHARINDEX('\',Source)+1,CHARINDEX('\',Source,CHARINDEX('\',Source)+1)-CHARINDEX('\',Source)-1) 
FROM T 
3

. \의 두 번째 인스턴스를 찾기 위해 당신이 첫 번째의 위치를 ​​통과 할 수 있지만이에 CHARINDEX

WITH T(Source) AS 
(
SELECT 'Location\Georgia\Atlanta' UNION ALL 
SELECT 'Country\USA\States\Minnesota' 
) 
SELECT *, 
     SUBSTRING(Source, F,CHARINDEX('\',Source, F) - F) 
FROM T 
CROSS APPLY (SELECT 1 + CHARINDEX('\',Source)) CA(F) 
WHERE Source LIKE '%\%\%' 
+0

+1 당신도 joel의 코멘트를 언급 한 +1 (데이터 구조가 나에게 상당히 지저분한 것 같아서) –

+0

네,이 파일 경로를 수행해야만했습니다. 그런 구조의 데이터 (결코 다른 필드에 있어야하는 데이터) – ganders

관련 문제