totn Access

MS Access 2003: Parse a string into two values based on the occurrence of an underscore

This MSAccess tutorial explains how to parse a string into two values based on the occurrence of an underscore in Access 2003 (with screenshots and step-by-step instructions).

Question: In Access 2003/XP/2000/97, I have a table with a field that I need to separate into two different fields. The field is alpha/numeric in its contents:

Example of the field content is:

1234_ACME company

I need this field split into two fields such as:

Field1: 1234
Field2: ACME company

The Underscore (_) can be in any position in the string.

Answer: In Access, you can create custom functions to supplement what is missing in Access. To do this, click on the Modules tab in the Database window and create a new module.

Then paste in the following custom functions:

Function ParseFirstComp(pValue) As String

   Dim LPosition As Integer

   'Find postion of underscore
   LPosition = InStr(pValue, "_")

   'Return the portion of the string before the underscore
   If LPosition > 0 Then
      ParseFirstComp = Left(pValue, LPosition - 1)
   Else
      ParseFirstComp = ""
   End If

End Function

Function ParseSecondComp(pValue) As String

   Dim LPosition As Integer

   'Find postion of underscore
   LPosition = InStr(pValue, "_")

   'Return the portion of the string after the underscore
   If LPosition > 0 Then
      ParseSecondComp = Mid(pValue, LPosition + 1)
   Else
      ParseSecondComp = ""
   End If

End Function

This first function called ParseFirstComp will return the portion of the string before the underscore. The second function called ParseSecondComp will return the portion of the string after the underscore.

Next, you'll need to use this function in your query.

Microsoft Access

In the example above, we've used both functions to parse a field called Name. You will need to substitute your field name with the ParseFirstComp and ParseSecondComp functions. So we've typed ParseFirstComp([Name]) in the first field and ParseSecondComp([Name]) in the second field. Access assigns the field name of "Expr1" and "Expr2" - you can always overwrite this.

Now, when we run the query, we'll get the following results:

Microsoft Access