2008-10-01 4 views
1

문자열이 포함 된 열이 있습니다. 해당 열의 문자열은 다음과 같이 :MS Access에서 텍스트 구문 분석

값 1 : FirstString/SecondString 값 2 : ThirdString

FirstString/SecondString/ThirdString

내가 그래서 두 값이이 구문을 분석 할 필요가

가 실제로 긴 문자열을 가질 수 있지만, 나는 항상 같은 구분 태어나 셨 [문자열 1/문자열 2/string3/...]를 [stringN]

내가 끝낼 필요하면이입니다

열 1 : [문자열 1/문자열 2/string3/등 ...] 열 2 : [stringN]

내가이 일을 액세스에 어쨌든 찾을 수 없습니다. 어떤 제안? 정규 표현식이 필요한가요? 그렇다면 쿼리 디자이너에서이 작업을 수행 할 수있는 방법이 있습니까?

업데이트 : 두 표현식 모두 다음과 같은 오류 메시지를 표시합니다. "입력 한 식에 잘못된 구문이 들어 있거나 텍스트 데이터를 따옴표로 묶어야합니다."

expr1: Left([Property] , InStrRev([Property] , "/") - 1), Mid([Property] , InStrRev([Property] , "/") + 1) 

expr1: mid([Property] , 1, instr([Property] , "/", -1)) , mid([Property] , instr([Property] , "/", -1)+1, length([Property])) 

답변

1

는 열로 다음 두 표현식을 사용

Left(col, InStrRev(col, "/") - 1), Mid(col, InStrRev(col, "/") + 1) 

COL이 열입니다.

last_index= InStrRev(your_string, "/") 

first_part= Left$(your_string, last_index - 1) 
last_part= Mid$(your_string, last_index + 1) 
+0

이렇게하면 따옴표에 오류가 발생합니다. "/"예약 된 charater 일종인가요? – Micah

+0

어디에서 열을 입력하고 "/"를 입력하면 오류가 발생합니까? 보다 완전한 답변을 제공하기 위해 질문을 전체 SQL 문으로 업데이트하십시오. – tzot

0

미드 (COL 1 측량기 (COL, "/", -1)), 중간 (COL 측량기 (COL, "/", -1) +1, 길이 (COL))

쿼리에서
+0

같은 물건을 할 수 있습니까? "col"은 무엇을 나타 냅니까? – Micah

+0

col이 열입니다. – tzot

+0

SubClassName : mid ([속성], 1, instr ([속성], "/", -1)), 중간 ([속성], instr ([속성], "/", -1) +1, 길이 [Property]))에는 유효하지 않은 데이터가 들어 있거나 텍스트를 따옴표로 묶어야한다고 나와 있습니다. – Micah

0

당신이 첫번째 장소에있는 문제를 방지 할 수 있도록 적절하게 정상화하기 위해 기본 데이터 구조를 해결할 수있는 기회가 : VBA의 경우

다음을 사용할 수 있습니까? 데이터 검색과 함께 전체 호스트 또는 정확하게 유지 관리하는 데 문제가 있으며, 단일 필드에 여러 값을 저장하지 않으면 모두 개선됩니다.

0

SQL 문자열 함수가 아마도 최선의 방법 일 수 있도록 쿼리 내부에서이 작업을 수행하려고합니다.

그러나 VBA에서 액세스 할 수있는 정규식 COM 개체가 있음을 언급 할 가치가 있습니다. 매크로 코드 안에 Microsoft VBScript Regular Expressions 라이브러리에 대한 참조 만 추가하면됩니다.

그런 다음 당신은 당신이 저에게 당신이 뭘의 아이디어를 줄 수있는이

Dim szLine As String 
Dim regex As New RegExp 
Dim colregmatch As MatchCollection 

With regex 
    .MultiLine = False 
    .Global = True 
    .IgnoreCase = False 
End With 

szLine = "FirstString/SecondString/ThirdString" 

regex.Pattern = "^(.*?\/.*?)/(.*?)$" 
Set colregmatch = regex.Execute(szLine) 

'FirstString/SecondString 
Debug.Print colregmatch.Item(0).submatches.Item(0) 
'ThirdString 
Debug.Print colregmatch.Item(0).submatches.Item(1)