কেন String Functions?
১০ লাখ customer — নামগুলো নোংরা:
১ million customer manually ঠিক করা সম্ভব? Manager চায়: format, trim, upper/lower email, first name, phone country code।
String কী?
String = text / character-এর collection। উদা: "Rahim", "Dhaka", "rahim@gmail.com"।
| Data | Type | Meaning |
|---|---|---|
| 100 | Number | সংখ্যা |
| "100" | String | Text |
| "Rahim" | String | নাম |
| "Dhaka" | String | শহর |
Database-এ String
| customer_id | name | city | phone | |
|---|---|---|---|---|
| 1 | Rahim Khan | RAHIM@GMAIL.COM | dhaka | 01712345678 |
| 2 | Karim Hossain | karim@gmail.com | DHAKA | 01812345678 |
| 3 | Jannat Ahmed | JANNAT@YAHOO.COM | Dhaka | 01912345678 |
| 4 | Md Hasan | mdhasan@gmail.com | Chittagong | 01612345678 |
Problems: mixed case, city inconsistency, messy formats।
Function Map
LOWER()
UPPER()
Reports, codes, category labels-এ ব্যবহার।
LOWER vs UPPER
| Function | কাজ |
|---|---|
| LOWER() | সব ছোট হাতের |
| UPPER() | সব বড় হাতের |
LOWER → data science · UPPER → DATA SCIENCE
TRIM()
LTRIM() / RTRIM()
| Function | Removes |
|---|---|
| TRIM() | Left + Right |
| LTRIM() | Left only |
| RTRIM() | Right only |
CONCAT() — map only
একাধিক value জোড়া → CONCAT(first_name, ' ', last_name) → Rahim Khan।
CONCAT_WS() — map only
Separator একবার: CONCAT_WS(', ', city, country) → Dhaka, Bangladesh।
LENGTH() — map only
MySQL-এ LENGTH() ≈ bytes (ASCII-এ "Rahim" → 5)।
LENGTH vs CHAR_LENGTH — pointer
SUBSTRING()
LEFT()
RIGHT()
LEFT vs RIGHT vs SUBSTRING
| Function | Extracts | BD-DHK-2026 |
|---|---|---|
| LEFT() | Beginning | LEFT(…,2)=BD |
| RIGHT() | Ending | RIGHT(…,4)=2026 |
| SUBSTRING() | Position | SUBSTRING(…,4,3)=DHK |
REPLACE()
REVERSE()
বেশি demo/helper — daily business report-এ কম।
LOCATE() — map only
Substring-এর position: LOCATE('@', email) → 1-based index (না থাকলে 0)।
INSTR()
INSTR(email, '@') — LOCATE-এর মতো position খোঁজা।
Extract Email Domain
Extract First Name
LIKE (operator)
Cleaning Pipeline
Nested Functions
CASE + LIKE
Case Study — Customer Cleaning
- TRIM spaces
- Standardize case
- Full names
- First names
- Email domains
- Gmail users
- Name length
- Replace junk
- Phone standardize
- Clean report
Case Study — Products
Case Study — HR
NULL vs '' vs space
CONCAT + NULL — pointer
CONCAT-এ NULL থাকলে result NULL হতে পারে — COALESCE দিয়ে বাঁচানো যায়।
Full Comparison Table
| Function | Purpose | Example |
|---|---|---|
| LOWER/UPPER | case | rahim / RAHIM |
| TRIM/LTRIM/RTRIM | spaces | Rahim |
| LENGTH/CHAR_LENGTH | bytes/chars | 5 |
| CONCAT/CONCAT_WS | join | Rahim Khan |
| LEFT/RIGHT/SUBSTRING | extract | BD / 2026 / DHK |
| REPLACE/REVERSE | modify | Dhaka / mihaR |
| LOCATE/INSTR | position | 6 |
Must Know vs Good to Know
Must Know
Good to Know
Predict the Output (১৫+)
Which Function? (২০)
Common Mistakes (১৫)
- String vs number গুলিয়ে
- Text-এ quotes ভুলে
- Wrong quotation marks
- CONCAT-এ comma ভুলে
- LENGTH vs CHAR_LENGTH
- LEFT vs SUBSTRING
- Pattern-এ = ব্যবহার
- LIKE-এ % ভুলে
- % ভুল জায়গায়
- CONCAT-এ space ভুলে
- NULL ignore
- '' ও NULL এক ভাবা
- আগে SELECT না করে UPDATE
- REPLACE সব match না বোঝা
- Nested inside-out না পড়া
String in Data Cleaning
Mini Project — Customer Cleaning
২০+ dirty rows: extra spaces, mixed case, phones, missing values।
- Clean name
- Clean email
- First name
- Email provider
- Gmail customers
- Name contains Rahim
- Name length
- City + Country
- Standard phone
- Final clean report
Professional Workflows
Performance & Best Practices
- WHERE-এ function অপ্রয়োজনে index বাধা দিতে পারে
- Clean data আগে store করা ভালো হতে পারে
- Huge table-এ বারবার heavy transform এড়াও
- Aliases ব্যবহার করো
- UPDATE আগে SELECT দিয়ে test
SELECT → then UPDATE
Interview Top 30
MCQ (২৫+)
Viva
Classroom Exercises (২০)
Final Cheat Sheet
LOWER() → ছোট হাতের
UPPER() → বড় হাতের
TRIM()/LTRIM()/RTRIM() → spaces
CONCAT()/CONCAT_WS() → join
LENGTH()/CHAR_LENGTH() → bytes/chars
LEFT()/RIGHT()/SUBSTRING() → extract
REPLACE()/REVERSE() → modify
LOCATE()/INSTR() → position
LIKE → pattern search (operator)
COALESCE() → NULL fallback