Extracting Portions of Text
Extract specific characters or substrings from text using LEFT, RIGHT, and MID formulas.
Overview
Text extraction formulas let you pull out specific portions of a text string based on position and length. This is essential for parsing structured text, extracting codes, splitting data, and processing formatted strings.
Relevant Formulas
LEFT
Returns characters from the start of a text string.
RIGHT
Returns characters from the end of a text string.
View RIGHT Formula Reference →
MID
Returns specific characters from the middle of a text string.
Basic Usage
LEFT - Extract from Beginning
// Get first 3 characters
=LEFT([product_code], 3)
Input: "ABC-12345"
Result: "ABC"
// Get area code from phone
=LEFT([phone], 3)
Input: "555-1234"
Result: "555"
RIGHT - Extract from End
// Get last 4 characters
=RIGHT([account_number], 4)
Input: "ACCT-9876"
Result: "9876"
// Get file extension
=RIGHT([filename], 3)
Input: "report.pdf"
Result: "pdf"
MID - Extract from Middle
// Extract characters 5-7 (starting at position 5, length 3)
=MID([sku], 5, 3)
Input: "PRD-CAT-001"
Result: "CAT"
// Extract month from date string "YYYY-MM-DD"
=MID([date_string], 6, 2)
Input: "2024-03-15"
Result: "03"
Common Use Cases
Parsing Codes and IDs
// Extract category from SKU "CAT-PROD-VAR"
=LEFT([sku], 3) // "CAT"
// Extract product code
=MID([sku], 5, 4) // "PROD"
// Extract variant
=RIGHT([sku], 3) // "VAR"
Phone Number Formatting
// Extract area code
=LEFT([phone], 3)
// Extract exchange
=MID([phone], 4, 3)
// Extract line number
=RIGHT([phone], 4)
Date Part Extraction
// From "YYYY-MM-DD" format
=LEFT([date_str], 4) // Year: "2024"
=MID([date_str], 6, 2) // Month: "03"
=RIGHT([date_str], 2) // Day: "15"
Email Processing
// Get username (before @)
=LEFT([email], FIND("@", [email]) - 1)
// Get domain (after @)
=MID([email], FIND("@", [email]) + 1, LEN([email]))
Advanced Techniques
Dynamic Length Extraction
// Extract everything before a delimiter
=LEFT([text], FIND("-", [text]) - 1)
// Extract everything after a delimiter
=RIGHT([text], LEN([text]) - FIND("-", [text]))
Combining Extraction Functions
// Extract middle portion between two delimiters
=MID([text],
FIND("-", [text]) + 1,
FIND("/", [text]) - FIND("-", [text]) - 1)
Conditional Extraction
// Extract different parts based on format
=IF(FIND("-", [code]) > 0,
LEFT([code], FIND("-", [code]) - 1),
[code])
Working with Variable-Length Text
Using FIND/SEARCH
// Extract text before first space
=LEFT([full_name], FIND(" ", [full_name]) - 1)
// Extract text after last space (last name)
=RIGHT([full_name], LEN([full_name]) - FIND(" ", [full_name]))
Using LEN for Dynamic Calculation
// Get last N characters where N varies
=RIGHT([text], [extract_length])
// Get all but first N characters
=RIGHT([text], LEN([text]) - [skip_chars])
Handling Edge Cases
NULL Values
// Safe extraction with NULL check
=IF(ISBLANK([text]), NULL, LEFT([text], 3))
Too-Short Strings
// Avoid errors when string is shorter than requested length
=IF(LEN([text]) >= 3, LEFT([text], 3), [text])
Missing Delimiters
// Handle cases where delimiter doesn't exist
=IF(FIND("-", [text]) > 0,
LEFT([text], FIND("-", [text]) - 1),
[text])
Extraction Patterns
Fixed-Position Data
// Postal code from address: "City, ST 12345"
=RIGHT([address], 5)
// State code
=MID([address], LEN([address]) - 7, 2)
Delimiter-Based Extraction
// First part: before delimiter
=LEFT([data], FIND("|", [data]) - 1)
// Second part: after delimiter
=MID([data], FIND("|", [data]) + 1, LEN([data]))
Step-by-Step: Creating Extraction Formulas
- Identify Pattern - Determine the position or delimiter pattern
- Choose Function - LEFT for start, RIGHT for end, MID for middle
- Calculate Position - Use FIND/SEARCH if delimiter-based
- Handle Edge Cases - Add NULL checks and validations
- Test - Verify with various input lengths
- Document - Comment the extraction logic
Best Practices
- Validate Input - Check for NULL and unexpected formats
- Use FIND Carefully - FIND returns error if text not found
- Consider Trimming - Use TRIM to remove whitespace
- Test Edge Cases - Empty strings, single characters, missing delimiters
- Document Assumptions - Note expected text format
Performance Considerations
- Index Source Columns - If extracting from indexed columns
- Avoid Complex Nesting - Break into multiple columns if very complex
- Pre-validate Data - Clean data before extraction when possible
Related Operations
- Getting Text Length - LEN for dynamic extraction
- Joining Columns - CONCAT to reassemble parts
- Replacing Text - SUBSTITUTE for pattern-based extraction
- Removing Extra Spaces - TRIM before extraction
Additional Formula References
Additional examples and screenshots will be added soon.