10. Analysts रोज वापरतात ती Text Functions
10.5 Practice: Agent ची नावं स्वच्छ करा आणि hub codes तपासा
का (Why). खऱ्या lists मध्ये text चे सगळे प्रश्न एकत्र असतात: spaces, capital अक्षरं, नसलेली नावं आणि न जुळणारे codes. एका query मध्ये ते सोडवले की रोज कामाला येणारी सवय लागते.
काय (What). एकाच SELECT मध्ये trim(), replace(), upper(), lower(), substr() आणि coalesce() एकत्र वापरता. यामुळे फक्त query मध्ये दिसणं बदलतं; साठवलेला data तसाच राहतो. स्वच्छ केल्यावर दोन नावं सारखी झाली, तर त्यांना संभाव्य duplicates समजा आणि काहीही एकत्र करण्याआधी agent_id तपासा.
कसं (How). प्रत्येक agent साठी स्वच्छ display नाव बनवा, मग प्रत्येक tracking code ची तो ज्या hub code शी जुळायला हवा त्याच्याशी तुलना करा.
पायऱ्या
- पहिलं उदाहरण run करा आणि clean_name column वाचा.
- फक्त पहिलं अक्षर capital होतं हे लक्षात घ्या; प्रत्येक शब्दाचं पहिलं अक्षर capital करायला जास्त काम लागतं.
- ज्या shipments चा code खऱ्या hub शी जुळत नाही त्यांची यादी बघायला दुसरं उदाहरण run करा.
- Source data दुरुस्त करता यावा म्हणून त्या दोन shipments लिहून ठेवा.
उदाहरणे
उदाहरण 1 · dataset: swiftship_logistics
SELECT agent_id,
coalesce(
upper(substr(trim(replace(raw_name, ' ', ' ')), 1, 1)) ||
lower(substr(trim(replace(raw_name, ' ', ' ')), 2)),
'Name missing') AS clean_name
FROM agents
ORDER BY agent_id;Output
| agent_id | clean_name |
|---|---|
| 1 | Asha patil |
| 2 | Rahul sharma |
| 3 | Fatima khan |
| 4 | Oliver brown |
| 5 | élodie martin |
| 6 | Name missing |
Meaning. जास्तीच्या spaces गेल्या, Fatima च्या नावातली दोन spaces एक झाली, आणि प्रत्येक नाव capital अक्षराने सुरू होतं. upper() é बदलत नाही म्हणून élodie small च राहतं. Agent 6 साठी NULL ऐवजी Name missing दिसतं.
उदाहरण 2 · dataset: swiftship_logistics
SELECT s.shipment_id,
s.tracking_code,
s.hub_id,
h.hub_code
FROM shipments AS s
LEFT JOIN hubs AS h ON h.hub_id = s.hub_id
WHERE h.hub_code IS NULL
OR substr(s.tracking_code, 1, 6) <> h.hub_code;Output
| shipment_id | tracking_code | hub_id | hub_code |
|---|---|---|---|
| 1009 | LHR-03-00222 | 9 | NULL |
| 1010 | PNQ-01-00020 | NULL | NULL |
Meaning. दोन shipments तपासायला हव्यात. 1009 hub 9 कडे बोट दाखवते, जो hub अस्तित्वातच नाही. 1010 ला अजून hub नाही, म्हणून hub_id NULL आहे. बाकी प्रत्येक code आपल्या hub शी जुळतो. इथे वापरलेला LEFT JOIN chapter 15 मध्ये पूर्ण समजावला आहे.
Ravindra Bagale's Tip
replace(raw_name, ' ', ' ') changes each double space into one space once. A long run of spaces may need the same replace() more than once, and tabs or line breaks are not touched at all. Check the result instead of assuming one call fixed every space.
Ravindra Bagale's Tip – मराठी
replace(raw_name, ' ', ' ') प्रत्येक दोन spaces ची एक space एकदाच करतं. सलग खूप spaces असतील तर तोच replace() एकापेक्षा जास्त वेळा लागू शकतो, आणि tabs किंवा line breaks ला तो हातही लावत नाही. एका call ने सगळ्या spaces सुधारल्या असं न मानता result तपासा.
Ravindra Bagale's Tip – हिंदी
replace(raw_name, ' ', ' ') हर दो spaces को एक बार में एक space बनाता है। लगातार बहुत spaces हों तो वही replace() एक से ज़्यादा बार लगाना पड़ सकता है, और tabs या line breaks को यह छूता ही नहीं। एक call से सारी spaces ठीक हो गईं, ऐसा मानने के बजाय result जाँचिए।