SUBSTRING extraction in SQL - Time & Space Complexity
When we extract parts of text from database fields, it is important to know how the work grows as the text gets longer.
We want to understand how the time to get a substring changes when the input text size changes.
Analyze the time complexity of the following code snippet.
SELECT SUBSTRING(description, 1, 10) AS short_desc
FROM products;
This code extracts the first 10 characters from the "description" column for every product.
- Primary operation: Extracting a substring from each text field.
- How many times: Once per row in the products table.
Extracting a fixed-length substring takes time proportional to the length of the substring, not the full text.
| Input Size (length of full text) | Approx. Operations |
|---|---|
| 10 | About 10 operations (extract 10 chars) |
| 100 | Still about 10 operations (only first 10 chars extracted) |
| 1000 | Still about 10 operations (substring length fixed) |
Pattern observation: The time depends on the substring length, not the full text length.
Time Complexity: O(k)
This means the time grows with the length of the substring extracted, which is fixed here, so it stays constant regardless of full text size.
[X] Wrong: "Extracting a substring always takes time proportional to the full text length."
[OK] Correct: The operation only copies the requested substring length, so if that length is fixed, the time does not grow with the full text size.
Understanding how substring extraction scales helps you reason about text processing in databases, a common task in real projects and interviews.
What if we changed the substring length to be the full length of the text? How would the time complexity change?
Practice
SUBSTRING('Hello World', 7, 5) return?Solution
Step 1: Understand SUBSTRING parameters
The function takes the string 'Hello World', starts at position 7, and extracts 5 characters.Step 2: Extract substring from position 7
Counting characters: H(1) e(2) l(3) l(4) o(5) space(6) W(7) o(8) r(9) l(10) d(11). Starting at 7, 5 characters are 'World'.Final Answer:
'World' -> Option DQuick Check:
SUBSTRING('Hello World',7,5) = 'World' [OK]
- Starting count at 0 instead of 1
- Extracting fewer or more characters than length
- Including spaces incorrectly
Solution
Step 1: Recall SUBSTRING syntax
SUBSTRING(string, start_position, length) extracts length characters from start_position.Step 2: Match parameters to requirement
We want 3 characters starting at position 2, so SUBSTRING('Example', 2, 3) is correct.Final Answer:
SUBSTRING('Example', 2, 3) -> Option CQuick Check:
Syntax = SUBSTRING(string, start, length) [OK]
- Swapping start and length parameters
- Omitting length parameter
- Using zero-based start position
Users with a column username containing 'john_doe123', what is the result of SELECT SUBSTRING(username, 6, 4) FROM Users;?Solution
Step 1: Identify substring start and length
Start at position 6 and extract 4 characters from 'john_doe123'.Step 2: Count characters and extract
Characters: j(1) o(2) h(3) n(4) _(5) d(6) o(7) e(8) 1(9) 2(10) 3(11). Starting at 6: d(6), o(7), e(8), 1(9) -> 'doe1'.Final Answer:
'doe1' -> Option AQuick Check:
SUBSTRING('john_doe123',6,4) = 'doe1' [OK]
- Starting count at 0
- Extracting wrong number of characters
- Confusing underscore with letter
SELECT SUBSTRING('Database', 0, 4);Solution
Step 1: Check SUBSTRING start position rules
In SQL, string positions start at 1, not 0.Step 2: Analyze given query
Start position is 0, which is invalid and causes an error.Final Answer:
Start position cannot be zero -> Option AQuick Check:
Positions start at 1, zero is invalid [OK]
- Using zero as start position
- Confusing string quotes
- Wrong number of parameters
product_code with values like 'AB12345XYZ'. Write a SQL query to extract the numeric part (5 digits) starting from position 3. Which query correctly extracts '12345'?Solution
Step 1: Understand the string structure
'AB12345XYZ' has 'A'(1), 'B'(2), '1'(3), '2'(4), '3'(5), '4'(6), '5'(7), 'X'(8), 'Y'(9), 'Z'(10).Step 2: Extract 5 digits starting at position 3
Starting at 3, extract 5 characters: '1'(3), '2'(4), '3'(5), '4'(6), '5'(7) -> '12345'.Final Answer:
SELECT SUBSTRING(product_code, 3, 5) FROM products; -> Option BQuick Check:
Start=3, length=5 extracts '12345' [OK]
- Starting extraction at wrong position
- Extracting fewer or more characters
- Confusing character positions
Ready to prove it?
Pass the test and this pattern moves unknown
