LENGTH and CHAR_LENGTH in SQL - Time & Space Complexity
We want to understand how the time to calculate string lengths grows as the input data grows.
How does the work change when we measure length of many strings?
Analyze the time complexity of the following code snippet.
SELECT LENGTH(name), CHAR_LENGTH(name)
FROM employees;
This query calculates the byte length and character length of each employee's name.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Calculating length of each string in the column.
- How many times: Once for each row in the employees table.
Each string length calculation takes time proportional to the string's size. Doing this for many rows adds up.
| Input Size (n rows) | Approx. Operations |
|---|---|
| 10 | Length calculations for 10 strings |
| 100 | Length calculations for 100 strings |
| 1000 | Length calculations for 1000 strings |
Pattern observation: The total work grows linearly with the number of rows.
Time Complexity: O(n * m)
This means the time grows directly in proportion to the number of rows processed and the average length of the strings.
[X] Wrong: "Calculating LENGTH or CHAR_LENGTH is instant and does not depend on string size or number of rows."
[OK] Correct: Each length calculation must look at the string characters, so longer strings or more rows take more time.
Understanding how simple functions like LENGTH scale helps you reason about query performance and data processing in real projects.
"What if we added a WHERE clause to filter rows before calculating LENGTH? How would the time complexity change?"
Practice
LENGTH and CHAR_LENGTH functions in SQL?Solution
Step 1: Understand what LENGTH counts
LENGTHreturns the number of bytes used by the string, which can be more than characters if multi-byte characters exist.Step 2: Understand what CHAR_LENGTH counts
CHAR_LENGTHreturns the number of characters, counting multi-byte characters as one each.Final Answer:
LENGTHcounts bytes,CHAR_LENGTHcounts characters. -> Option BQuick Check:
LENGTH ≠ CHAR_LENGTH when multi-byte chars present [OK]
- Confusing bytes with characters
- Assuming both functions return the same count
- Thinking CHAR_LENGTH counts words
name using SQL?Solution
Step 1: Identify function for character count
CHAR_LENGTHis the correct function to count characters in a string column.Step 2: Check syntax correctness
SELECT CHAR_LENGTH(name) FROM users;is valid SQL syntax to get character count per row.Final Answer:
SELECT CHAR_LENGTH(name) FROM users; -> Option AQuick Check:
Use CHAR_LENGTH() for character count [OK]
- Using LENGTH() when characters count is needed
- Using COUNT() which counts rows, not string length
- Using non-existent SIZE() function
messages with a column text containing the value 'café', what will SELECT LENGTH(text), CHAR_LENGTH(text) FROM messages; return?Solution
Step 1: Understand byte vs character count for 'café'
The letter 'é' is a 2-byte character in UTF-8, so LENGTH counts bytes: 'c'(1) + 'a'(1) + 'f'(1) + 'é'(2) = 5 bytes.Step 2: Count characters with CHAR_LENGTH
CHAR_LENGTH counts characters, so 'c', 'a', 'f', 'é' = 4 characters.Final Answer:
(5, 4) -> Option DQuick Check:
LENGTH = bytes, CHAR_LENGTH = characters [OK]
- Assuming LENGTH and CHAR_LENGTH return same value
- Counting bytes as characters
- Ignoring multi-byte encoding
SELECT CHAR_LENGTH(name) FROM users WHERE LENGTH(name) > 5; but it returns rows even though some names look shorter than 5 characters. What is the likely issue?Solution
Step 1: Understand LENGTH in WHERE clause
LENGTH(name)counts bytes, so names with multi-byte characters may have byte length greater than character count.Step 2: Reason why rows are returned unexpectedly
If names have fewer than or equal to 5 characters but more than 5 bytes, the conditionLENGTH(name) > 5succeeds, so rows match unexpectedly.Final Answer:
TheLENGTHfunction counts bytes, so multi-byte characters make the length larger than character count. -> Option AQuick Check:
LENGTH counts bytes, affects WHERE filters [OK]
- Thinking LENGTH counts characters
- Assuming CHAR_LENGTH unsupported
- Believing LENGTH can't be in WHERE clause
comments where the text length is exactly 10 characters, including multi-byte characters. Which query is correct?Solution
Step 1: Identify correct function for character count
To count characters including multi-byte ones, useCHAR_LENGTH.Step 2: Write condition for exact character length
UseWHERE CHAR_LENGTH(text) = 10to filter rows with exactly 10 characters.Final Answer:
SELECT * FROM comments WHERE CHAR_LENGTH(text) = 10; -> Option CQuick Check:
Use CHAR_LENGTH for character count filters [OK]
- Using LENGTH() which counts bytes, not characters
- Confusing LENGTH and CHAR_LENGTH equality
- Using contradictory conditions in WHERE clause
Ready to prove it?
Pass the test and this pattern moves unknown
