Parsing og formatering af strenge
SUBSTRING, positionering, opdeling og konvertering af store og små bogstaver på tværs af dialekter.
Parsing og formatering af strenge er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvorfor strengfunktioner bliver spurgt om
Virkelige data er rodede: fulde navne, der skal opdeles, e-maildomæner, der skal udtrækkes, koder indlejret i ID'er og inkonsekvent brug af store og små bogstaver. Interviewere bruger strengbehandling til at se, om du kan rense og omforme tekst uden at eksportere den til et script.
Ligesom med datoer er funktionerne kun løst standardiserede, så målet er at kende begrebet og de almindelige varianter.
- Udtræk af delstrenge og placering
- Sammenkædning
- Opdeling og erstatning
- Konvertering af store og små bogstaver samt trimning
SUBSTRING og placering
SUBSTRING(s FROM start FOR length) er standardformen i SQL; de fleste motorer accepterer også SUBSTRING(s, start, length). Strengpositioner er 1-baserede, hvilket er en klassisk fejl med én forskel for programmører, der er vant til sprog med 0-baserede positioner.
POSITION(sub IN s) (eller STRPOS/CHARINDEX) finder, hvor en delstreng begynder, og returnerer 0, hvis den ikke findes.
SELECT
SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year, -- '2024'
POSITION('-' IN 'INV-2024-042') AS first_dash; -- 4Udtræk af et e-maildomæne
Et klassisk gennemarbejdet eksempel. Find @, og tag derefter alt efter det. Kombinationen af POSITION og SUBSTRING er den portable tilgang.
I PostgreSQL kan du også bruge SPLIT_PART(email, '@', 2), som er mere læsevenlig og værd at nævne som det idiomatiske svar.
-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;
-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;Sammenkædning på tværs af SQL-dialekter
Det afhænger af SQL-dialekten, hvordan strenge sættes sammen, og interviewere forventer, at du kender varianterne.
- SQL-standarden / Postgres / Oracle: operatoren
||. - MySQL:
CONCAT(a, b, c)(operatoren||er som standard logisk ELLER). - SQL Server:
+til strenge ellerCONCAT().
CONCAT() behandler NULL som en tom streng, mens || og + typisk gør hele resultatet til NULL, hvis en operand er NULL. Det er en subtil kilde til fejl.
-- 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;Fælden ved NULL-sammenkædning
I forlængelse af den forrige sektion: Hvis last_name er NULL, giver first_name || ' ' || last_name NULL i Postgres, så hele navnet forsvinder.
Den defensive løsning er at bruge COALESCE på dele, der kan være NULL, eller at bruge CONCAT_WS (sammenkædning med separator), som springer NULL-værdier over og kun indsætter separatoren mellem værdier, der findes.
-- 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;Opdeling af strenge
"Hent det tredje segment ud af en kode med bindestreger" tester opdeling af strenge. PostgreSQLs SPLIT_PART(s, delim, n) returnerer den n-te del direkte og er det enkleste værktøj.
MySQL har ingen direkte opdelingsfunktion; idiomet er en indlejret SUBSTRING_INDEX: Hent de første n dele, og tag derefter den sidste af dem.
-- 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'Erstatning, trimning og udfyldning
Det er de renseoperationer, interviewere forventer, at du kender med det samme:
REPLACE(s, from, to)erstatter alle forekomster.TRIM(s)fjerner indledende og afsluttende mellemrum;TRIM(BOTH 'x' FROM s)fjerner et bestemt tegn.LPAD(s, len, ch)/RPADudfylder til en fast bredde, hvilket er praktisk til at udfylde ID'er med nuller.
SELECT
REPLACE('555.123.4567', '.', '-') AS phone, -- 555-123-4567
TRIM(' hello ') AS clean, -- 'hello'
LPAD('42', 6, '0') AS padded; -- '000042'Konvertering af store og små bogstaver samt længde
Det er vigtigt at normalisere brugen af store og små bogstaver, før du sammenligner eller grupperer tekst. UPPER og LOWER findes i alle SQL-motorer; INITCAP (Postgres/Oracle) gør ords begyndelsesbogstaver store.
LENGTH(s) returnerer antallet af tegn i de fleste motorer, men vær opmærksom på, at SQL Server bruger LEN(), og at LENGTH i nogle konfigurationer tæller bytes for tekst med flere bytes pr. tegn. Nævn denne nuance ved data, der ikke er ASCII.
SELECT
LOWER(email) AS email_norm,
INITCAP(city) AS city_pretty, -- Postgres
LENGTH(description) AS chars
FROM places;Mønstergenkendelse ud over LIKE
Når LIKE ikke er kraftfuld nok, vil interviewere gerne se, at du kender til regulære udtryk. PostgreSQL tilbyder operatoren ~ og REGEXP_REPLACE / REGEXP_MATCHES; MySQL har REGEXP / REGEXP_SUBSTR.
Eksempel: Behold kun cifrene i en telefonstreng. Med et regulært udtryk kan du gøre det på én linje i stedet for en kæde af kald til REPLACE.
-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
AS digits; -- '5551234567'Dybdegående eksempel: Normalisering og deduplikering af navne
En kombineret renseopgave. Antag, at navne kommer ind med overflødige mellemrum og blandede store og små bogstaver, hvilket skaber falske dubletter. Normalisér først, og gruppér derefter.
Trim, saml indvendige mellemrum med regulære udtryk, og konvertér til små bogstaver, før du tæller unikke værdier. Det er præcis den slags flertrinsargumentation, interviewere belønner.
SELECT
LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;Konvertering af strenge til tal og datoer
Strengkolonner indeholder ofte værdier, der burde være tal eller datoer. CAST(s AS INTEGER) eller Postgres' korte form s::int konverterer værdien, men fejler ved ugyldige input.
Til datoer parser TO_DATE(s, 'YYYY-MM-DD') (Postgres/Oracle) værdien med en eksplicit formatmaske. Det er den sikreste tilgang, fordi den fjerner tvivl om rækkefølgen af dag og måned.
SELECT
CAST(qty_text AS INTEGER) AS qty,
TO_DATE(order_str, 'DD/MM/YYYY') AS order_date
FROM staging;Hurtigt tjek
Overvej, hvordan NULL opfører sig ved sammenkædning af strenge.
Opsummering: Parsing og formatering af strenge
Vigtige pointer, du skal tage med til interviewet:
- Strengpositioner er 1-baserede;
SUBSTRING+POSITIONudtrækker efter placering. - Sammenkæd med
||(Postgres),CONCAT(MySQL) eller+(SQL Server), og husk NULL-videregivelse; foretrækCONCAT_WS. - Opdel med
SPLIT_PART(Postgres) eller indlejretSUBSTRING_INDEX(MySQL). REPLACE,TRIM,LPAD,UPPER/LOWERrenser og normaliserer; regulære udtryk håndterer de svære tilfælde.- Normalisér store og små bogstaver samt mellemrum før gruppering for at undgå falske dubletter.
Lær Forberedelse til kodeinterviews med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 90
- Lektioner
- 360
Ofte stillede spørgsmål
Er lektionen “Parsing og formatering af strenge” gratis?
Ja — hele teksten til “Parsing og formatering af strenge” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Parsing og formatering af strenge”?
SUBSTRING, positionering, opdeling og konvertering af store og små bogstaver på tværs af dialekter. Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?
Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Parsing og formatering af strenge”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?
Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Datoregning og intervaller
- Afkortning og gruppering af datoer
- Parsing og formatering af strenge
- Tidszoner og tidsstempler