Merkkijonojen jäsentäminen ja muotoilu
SUBSTRING, sijainti, pilkkominen ja kirjainkoon muuntaminen eri murteissa.
Merkkijonojen jäsentäminen ja muotoilu on ilmainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Valmistautuminen ohjelmointihaastatteluihin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Miksi merkkijonofunktioita kysytään
Todellinen data on sotkuista: kokonimet on ehkä jaettava osiin, sähköpostiosoitteista on poimittava verkkotunnukset, tunnisteisiin on upotettu koodeja ja kirjainkoko vaihtelee. Haastattelijat selvittävät merkkijonojen käsittelyn avulla, pystyttekö puhdistamaan ja muotoilemaan tekstiä uudelleen viemättä sitä erilliseen skriptiin.
Kuten päivämäärien kohdalla, funktioita ei ole yhdenmukaistettu täysin, joten tavoitteena on tuntea käsite ja yleiset muunnelmat.
- Osamerkkijonon poiminta ja sijainti
- Yhdistäminen
- Jakaminen ja korvaaminen
- Kirjainkoon muunto ja trimmaus
SUBSTRING ja sijainti
SUBSTRING(s FROM start FOR length) on SQL-standardin mukainen muoto; useimmat moottorit hyväksyvät myös muodon SUBSTRING(s, start, length). Merkkijonojen sijainnit ovat 1-pohjaisia, mikä on klassinen yhden yksikön siirtymästä johtuva virhelähde 0-pohjaisiin kieliin tottuneille ohjelmoijille.
POSITION(sub IN s) (tai STRPOS/CHARINDEX) etsii osamerkkijonon alkukohdan ja palauttaa arvon 0, jos osamerkkijonoa ei löydy.
SELECT
SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year, -- '2024'
POSITION('-' IN 'INV-2024-042') AS first_dash; -- 4Sähköpostiosoitteen verkkotunnuksen poiminta
Tämä on perusesimerkki. Etsi @-merkki ja poimi sitten kaikki sen jälkeinen. POSITION- ja SUBSTRING-funktioiden yhdistäminen on siirrettävä ratkaisu.
PostgreSQL:ssä voi käyttää myös funktiota SPLIT_PART(email, '@', 2), joka on selkeämpi ja mainitsemisen arvoinen idiomaattinen ratkaisu.
-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;
-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;Merkkijonojen yhdistäminen eri SQL-murteissa
Merkkijonojen yhdistäminen riippuu SQL-murteesta, ja haastattelijat odottavat teidän tuntevan eri vaihtoehdot.
- SQL-standardi / Postgres / Oracle:
||-operaattori. - MySQL:
CONCAT(a, b, c)(||-operaattori tarkoittaa oletusarvoisesti loogista TAI-operaatiota). - SQL Server: merkkijonoille
+tai funktioCONCAT().
CONCAT() käsittelee NULL-arvon tyhjänä merkkijonona, kun taas || ja + tekevät tyypillisesti koko tuloksesta NULL-arvon, jos jokin operandi on NULL. Tämä on hienovarainen bugien lähde.
-- Postgres
SELECT first_name || ' ' || last_name AS full_name FROM people;
-- MySQL / SQL Server
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM people;NULL-arvon aiheuttama yhdistämisansa
Edellisen esimerkin jatkoksi: jos last_name on NULL, lauseke first_name || ' ' || last_name palauttaa Postgresissa NULL-arvon, jolloin koko nimi katoaa.
Turvallinen ratkaisu on käyttää COALESCE-funktiota NULL-arvoja mahdollisesti sisältävissä osissa tai funktiota CONCAT_WS (yhdistäminen erottimella), joka ohittaa NULL-arvot ja lisää erottimen vain olemassa olevien arvojen väliin.
-- Safe in Postgres / MySQL
SELECT CONCAT_WS(' ', first_name, last_name) AS full_name FROM people;
-- Or guard each part
SELECT first_name || ' ' || COALESCE(last_name, '') FROM people;Merkkijonojen jakaminen
"Poimi yhdysmerkeillä erotellun koodin kolmas osa" on jakamista testaava tehtävä. PostgreSQL:n SPLIT_PART(s, delim, n) palauttaa n:nnen osan suoraan ja on selkein työkalu tähän.
MySQL:ssä ei ole suoraa jakofunktiota; käytä sisäkkäistä SUBSTRING_INDEX-ratkaisua: poimi ensin n ensimmäistä osaa ja ota sitten niistä viimeinen.
-- Postgres
SELECT SPLIT_PART('a-b-c-d', '-', 3); -- 'c'
-- MySQL: third part of a-b-c-d
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a-b-c-d', '-', 3), '-', -1); -- 'c'Korvaaminen, trimmaus ja täyttö
Puhdistustoimintoja, joiden haastattelijat odottavat olevan tuttuja:
REPLACE(s, from, to)korvaa kaikki esiintymät.TRIM(s)poistaa alussa ja lopussa olevat välilyönnit;TRIM(BOTH 'x' FROM s)poistaa tietyn merkin.LPAD(s, len, ch)/RPADtäyttävät merkkijonon kiinteään leveyteen, mikä on hyödyllistä tunnisteiden täyttämisessä etunollilla.
SELECT
REPLACE('555.123.4567', '.', '-') AS phone, -- 555-123-4567
TRIM(' hello ') AS clean, -- 'hello'
LPAD('42', 6, '0') AS padded; -- '000042'Kirjainkoon muunto ja pituus
Kirjainkoon normalisointi on olennaista ennen tekstin vertaamista tai ryhmittelyä. UPPER ja LOWER ovat yleisiä; INITCAP (Postgres/Oracle) aloittaa sanat isoilla alkukirjaimilla.
LENGTH(s) palauttaa useimmissa moottoreissa merkkien määrän, mutta huomioikaa, että SQL Server käyttää funktiota LEN() ja että joissakin kokoonpanoissa LENGTH laskee monibyttisen tekstin tavut. Tämä vivahde kannattaa mainita ASCII-merkistöön kuulumattomasta datasta puhuttaessa.
SELECT
LOWER(email) AS email_norm,
INITCAP(city) AS city_pretty, -- Postgres
LENGTH(description) AS chars
FROM places;Kuvioiden sovitus LIKE-operaattoria pidemmälle
Kun LIKE ei ole riittävän tehokas, haastattelijat arvostavat säännöllisten lausekkeiden tuntemusta. PostgreSQL tarjoaa ~-operaattorin sekä funktiot REGEXP_REPLACE ja REGEXP_MATCHES; MySQL:ssä ovat käytettävissä REGEXP ja REGEXP_SUBSTR.
Esimerkki: säilytä puhelinnumeromerkkijonosta vain numerot. Säännöllisellä lausekkeella tämä onnistuu yhdellä rivillä useiden peräkkäisten REPLACE-kutsujen sijaan.
-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
AS digits; -- '5551234567'Syvempi esimerkki: nimien normalisointi ja duplikaattien poisto
Tämä on yhdistetty puhdistustehtävä. Oletetaan, että nimet sisältävät ylimääräisiä välilyöntejä ja kirjainkoko vaihtelee, mikä aiheuttaa virheellisiä duplikaatteja. Normalisoi ensin ja ryhmittele vasta sen jälkeen.
Poista reunojen välilyönnit, tiivistä sisäiset välilyönnit regexillä ja muunna teksti pienaakkosiksi ennen yksilöllisten arvojen laskemista. Juuri tällaista monivaiheista päättelyä haastattelijat arvostavat.
SELECT
LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;Merkkijonojen muuntaminen luvuiksi ja päivämääriksi
Merkkijonosarakkeet sisältävät usein arvoja, joiden pitäisi olla lukuja tai päivämääriä. CAST(s AS INTEGER) tai Postgresin lyhyt muoto s::int tekee muunnoksen, mutta virheellinen syöte aiheuttaa virheen.
Päivämäärien tapauksessa TO_DATE(s, 'YYYY-MM-DD') (Postgres/Oracle) jäsentää arvon eksplisiittisen muotoilumaskin avulla. Tämä on turvallisin ratkaisu, koska se poistaa epäselvyyden päivän ja kuukauden järjestyksestä.
SELECT
CAST(qty_text AS INTEGER) AS qty,
TO_DATE(order_str, 'DD/MM/YYYY') AS order_date
FROM staging;Pikatarkistus
Päättele, miten NULL-arvo käyttäytyy merkkijonoja yhdistettäessä.
Kertaus: merkkijonojen jäsentäminen ja muotoilu
Haastattelussa muistettavat pääasiat:
- Merkkijonojen sijainnit ovat 1-pohjaisia;
SUBSTRING+POSITIONpoimivat arvoja sijainnin perusteella. - Yhdistä merkkijonot Postgresissa operaattorilla
||, MySQL:ssä funktiollaCONCATtai SQL Serverissä operaattorilla+. Muista NULL-arvon eteneminen ja suosi funktiotaCONCAT_WS. - Jaa merkkijono Postgresissa funktiolla
SPLIT_PARTtai MySQL:ssä sisäkkäiselläSUBSTRING_INDEX-funktiolla. REPLACE,TRIM,LPADjaUPPER/LOWERpuhdistavat ja normalisoivat merkkijonoja; säännölliset lausekkeet käsittelevät vaikeammat tapaukset.- Normalisoi kirjainkoko ja välilyönnit ennen ryhmittelyä, jotta virheelliset duplikaatit vältetään.
Opi Valmistautuminen ohjelmointihaastatteluihin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 90
- Oppitunnit
- 360
Usein kysytyt kysymykset
Onko oppitunti ”Merkkijonojen jäsentäminen ja muotoilu” ilmainen?
Kyllä – oppitunnin ”Merkkijonojen jäsentäminen ja muotoilu” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Valmistautuminen ohjelmointihaastatteluihin-kurssin, päivitä CoddyKit PROhon. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Merkkijonojen jäsentäminen ja muotoilu”?
SUBSTRING, sijainti, pilkkominen ja kirjainkoon muuntaminen eri murteissa. Harjoittelet Valmistautuminen ohjelmointihaastatteluihin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Valmistautuminen ohjelmointihaastatteluihin-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Valmistautuminen ohjelmointihaastatteluihin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Merkkijonojen jäsentäminen ja muotoilu”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Valmistautuminen ohjelmointihaastatteluihin-oppitunnilla?
Kyllä. Jokainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Päivämääräaritmetiikka ja aikavälit
- Päivämäärien katkaisu ja ryhmittely
- Merkkijonojen jäsentäminen ja muotoilu
- Aikavyöhykkeet ja aikaleimat