Kombinere strengfunksjoner i Transact-SQL. SQL-strengfunksjoner Sql legger til tegn i begynnelsen av en streng

Til andre. Den har følgende syntaks:

KONV(tall;N;M)

Argument Antall er i grunntall N. Funksjonen konverterer den til grunntall M og returnerer verdien som en streng.

Eksempel 1

Følgende spørring konverterer tallet 2 fra desimal til binært:

VELG KONV(2;10;2);

Resultat: 10

For å konvertere tallet 2E fra heksadesimal til desimal, kreves følgende spørring:

SELECT CONV("2E",16,10);

Resultat: 46

Funksjon CHAR() konverterer ASCII-kode til strenger. Den har følgende syntaks:

CHAR(n1;n2;n3..)

Eksempel 2

SELECT CHAR(83;81;76);

Resultat: SQL

Følgende funksjoner returnerer lengden på en streng:

  • LENGTH(streng);
  • OCTET_LENGTH(streng);
  • CHAR_LENGTH(streng);
  • CHARACTER_LENGTH(streng).

Eksempel 3

SELECT LENGTH("MySQL");

Resultat: 5

Noen ganger er denne funksjonen nyttig BIT_LENGTH(streng), som returnerer lengden på strengen i biter.

Eksempel 4

SELECT BIT_LENGTH("MySQL");

Resultat: 40

Funksjoner for arbeid med delstrenger

En delstreng er vanligvis en del av en streng. Ofte trenger du å vite posisjonen til den første forekomsten av en delstreng i en streng. Tre funksjoner løser dette problemet i MySQL:

  • LOCATE(delstreng, streng [,posisjon]);
  • POSISJON(delstreng, streng);
  • INSTR(streng, delstreng).

Hvis delstrengen ikke er inneholdt i strengen, returnerer alle tre funksjonene 0. INSTR()-funksjonen skiller seg fra de to andre i rekkefølgen på argumentene. Funksjonen LOCATE() kan inneholde et tredje argument posisjon, som lar deg søke etter en delstreng i en streng ikke fra begynnelsen, men fra en spesifisert posisjon.

Eksempel 5

SELECT LOCATE("Topaz", "åpent aksjeselskap Topaz");

Resultat: 31

SELECT POSITION("Topaz", "åpent aksjeselskap Topaz");

Resultat: 31

SELECT INSTR("åpent aksjeselskap Topaz",'Topaz');

Resultat: 31

SELECT LOCATE("Topaz", "Topaz Plant and Topaz LLC", 9);

Resultat: 20

SELECT LOCATE("Almaz", "Topaz Open Joint Stock Company");

Resultat: 0

Funksjoner VENSTRE(linje, N) Og HØYRE(streng, N) returner henholdsvis de N-tegnene lengst til venstre og lengst til høyre i strengen.

Eksempel 6

SELECT LEFT("MySQL DBMS", 4);

Resultat: DBMS

SELECT RIGHT("MySQL DBMS", 5);

Resultat: MySQL

Noen ganger må du få en delstreng som starter på en gitt posisjon. Følgende funksjoner brukes til dette:

  • SUBSTRING(streng, posisjon, N);
  • MID(linje, posisjon, N).

Begge funksjonene returnerer N tegn i den gitte strengen, med start på den angitte posisjonen.

Eksempel 7

SELECT SUBSTRING("MySQL DBMS er en av de mest populære DBMS", 6.5);

Resultat: MySQL

Denne funksjonen er veldig nyttig når du arbeider med e-postadresser og nettstedsadresser. SUBSTR_INDEX(). Funksjonen har tre argumenter:

SUBSTR_INDEX(streng, skilletegn, N).

N-argumentet kan være positivt eller negativt. Hvis den er negativ, finner funksjonen den N-te forekomsten av separatoren, tellende fra høyre. Deretter returnerer den delstrengen som ligger til høyre for det funnet skilletegnet. Hvis N er positiv, finner funksjonen den N-te forekomsten av skilletegnet til venstre og returnerer delstrengen som ligger til venstre for det funnet skilletegnet.

Eksempel 8

SELECT SUBSTRING_INDEX("www.mysql.ru",".,2);

Resultat: www.mysql

SELECT SUBSTRING_INDEX("www.mysql.ru",".",-2);

Resultat: mysql.ru

Funksjon REPLACE(streng; delstreng1; delstreng2) lar deg erstatte alle forekomster av delstreng1 med delstreng2 i en streng.

Sist oppdatert: 29.07.2017

Følgende funksjoner kan brukes til å arbeide med strenger i T-SQL:

    LEN: Returnerer antall tegn på en linje. Som en parameter sendes en streng til funksjonen som lengden må finnes for:

    SELECT LEN("Apple") -- 5

    LTRIM: Fjerner innledende mellomrom fra en streng. Tar strengen som en parameter:

    VELG LTRIM ("Apple")

    RTRIM: Fjerner etterfølgende mellomrom fra en streng. Tar strengen som en parameter:

    VELG RTRIM(" Apple ")

    CHARINDEX: Returnerer indeksen der den første forekomsten av en delstreng i en streng er funnet. En understreng sendes som den første parameteren, og strengen det skal søkes i, sendes som den andre:

    SELECT CHARINDEX("pl", "Eple") -- 3

    PATINDEX: Returnerer indeksen der den første forekomsten av et bestemt mønster er funnet i en streng:

    VELG PATINDEX("%p_e%", "Apple") -- 3

    VENSTRE: Kutter et spesifisert antall tegn fra begynnelsen av en linje. Den første parameteren til funksjonen er strengen, og den andre er antall tegn som må kuttes fra begynnelsen av strengen:

    SELECT LEFT("Apple", 3) -- App

    HØYRE: Kutter et spesifisert antall tegn fra slutten av en streng. Den første parameteren til funksjonen er strengen, og den andre er antall tegn som må kuttes fra begynnelsen av strengen:

    SELECT RIGHT("Apple", 3) -- ple

    SUBSTRING: Kutter en delstreng med en spesifisert lengde fra en streng, og starter ved en bestemt indeks. Den første parameteren til funksjonen er strengen, den andre er startindeksen for kutting, og den tredje parameteren er antall tegn som skal kuttes:

    VELG SUBSTRING("Galaxy S8 Plus", 8, 2) -- S8

    ERSTATT: Erstatter en delstreng med en annen i en streng. Den første parameteren til funksjonen er en streng, den andre er understrengen som skal erstattes, og den tredje er understrengen som skal erstattes med:

    SELECT REPLACE("Galaxy S8 Plus", "S8 Plus", "Note 8") -- Galaxy Note 8

    REVERSE : reverserer strengen:

    VELG REVERSE("123456789") -- 987654321

    CONCAT: Slår sammen to strenger til én. Som en parameter godtar den 2 eller flere strenger som må kobles til:

    SELECT CONCAT("Tom", " ", "Smith") -- Tom Smith

    LOWER : Konverterer strengen til små bokstaver:

    SELECT LOWER("Eple") -- eple

    UPPER : konverterer strengen til store bokstaver

    SELECT UPPER("Eple") -- EPLE

    SPACE: returnerer en streng som inneholder et spesifisert antall mellomrom

La oss for eksempel ta tabellen:

LAG TABELL Produkter (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Produsent NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL);

Og når vi henter data, vil vi bruke strengfunksjoner:

SELECT UPPER(LEFT(Manufacturer,2)) AS Abbreviation, CONCAT(ProductName, " - ", Manufacturer) AS FullProdName FROM Products ORDER BY Abbreviation

Transact-SQL-språkfunksjoner kan være aggregerte eller skalære. Disse typer funksjoner er omtalt i denne artikkelen.

Aggregerte funksjoner

Aggregerte funksjoner utfører beregninger på en gruppe kolonneverdier og returnerer alltid en enkelt verdi som et resultat av disse beregningene. Transact-SQL støtter flere vanlige aggregerte funksjoner:

AVG

Beregner det aritmetiske gjennomsnittet av dataene i en kolonne. Verdiene som beregningen utføres på må være numeriske.

MIN og MAX

Bestemmer maksimums- og minimumsverdien for alle dataverdier i en kolonne. Verdier kan være numeriske, strenge eller tidsmessige (dato/klokkeslett).

SUM

Beregner den totale summen av verdiene i en kolonne. Verdiene som beregningen utføres på må være numeriske.

TELLE

Teller antall ikke-nullverdier i en kolonne. count(*)-funksjonen er den eneste aggregerte funksjonen som ikke utfører beregninger på kolonner. Denne funksjonen returnerer antall rader (uavhengig av om individuelle kolonner inneholder nullverdier).

COUNT_BIG

I likhet med tellefunksjonen, med den forskjellen at den returnerer en BIGINT dataverdi.

Bruken av vanlige aggregerte funksjoner i en SELECT-setning vil bli diskutert i en fremtidig artikkel.

Skalære funksjoner

Transact-SQL skalarfunksjoner brukes til å lage skalære uttrykk. (En skalarfunksjon utfører beregninger på en enkelt verdi eller en liste med verdier, mens en aggregert funksjon utfører beregninger på en gruppe verdier over flere rader.) Skalarfunksjoner kan deles inn i følgende kategorier:

    numeriske funksjoner;

    datofunksjoner;

    strengfunksjoner;

    systemfunksjoner;

    metadatafunksjoner.

Disse typer funksjoner diskuteres i påfølgende avsnitt.

Numeriske funksjoner

Transact-SQL numeriske funksjoner er matematiske funksjoner for å endre numeriske verdier. En liste over numeriske funksjoner og deres korte beskrivelser er gitt i tabellen nedenfor:

Transact-SQL numeriske funksjoner
Funksjon Syntaks Beskrivelse Eksempel på bruk
ABS ABS(n)

Returnerer den absolutte verdien (det vil si at negative verdier returneres som positive) av et numerisk uttrykk n.

SELECT ABS(-5.320) -- Returnerer 5.320 SELECT ABS(8.90) -- Returnerer 8.90

ACOS, ASIN, ATAN, ATN2 ACOS(n), ASIN(n), ATAN(n), ATN2(n, m)

Inverse trigonometriske funksjoner som beregner arccosinus, arcsine, arctangent av verdien n (for ATN2 beregnes arctangens n/m). Inngangsverdiene n, m og resultatet er av datatypen FLOAT.

COS, SIN, TAN, COT COS(n), SIN(n), TAN(n), COT(n)

Trigonometriske funksjoner som beregner cosinus, sinus, tangens, cotangens av verdien n. Resultatet har datatypen FLOAT.

GRADER, RADIANER GRADER(n), RADIANER(n)

DEGREES-funksjonen konverterer radianer til grader, henholdsvis RADIANER, omvendt.

SELECT DEGREES(PI() / 4) -- Returnerer 45 SELECT COS(RADIANS(60.0)) -- Returnerer 0.5

TAK TAK(n)

Avrunder et tall til en høyere heltallsverdi.

SELECT CEILING(-5.320) -- Returnerer -5 SELECT CEILING(8.90) -- Returnerer 9

RUND RUNDE(n; p; [t])

Avrunder verdien av n til nærmeste p. Når p er et positivt tall, avrundes brøkdelen av n, og når den er negativ, avrundes heltallsdelen. Når du bruker det valgfrie argumentet t, blir ikke tallet n avrundet, men snarere avkortet (det vil si avrundet ned).

SELECT ROUND(5,3208, 3) -- Returnerer 5,3210 SELECT ROUND(125,384, -1) -- Returnerer 130,000 SELECT ROUND(125,384, -1, 1) -- Returnerer 120,000

GULV ETASJE(n)

Avrundes ned til laveste heltallsverdi.

SELECT FLOOR(5,88) -- Returnerer 5

EXP EXP(n)

Beregner verdien av e n .

LOGG, LOGG10 LOG(n), LOG10(n)

LOG(n) - beregner den naturlige logaritmen (dvs. grunntall e) til tallet n, LOG10(n) - beregner desimallogaritmen (grunntall 10) til tallet n.

P.I. PI()

Returnerer verdien av π (3,1415).

MAKT POWER(x; y)

Beregner verdien av x y .

RAND RAND()

Returnerer et vilkårlig antall av typen FLOAT i området med verdier mellom 0 og 1.

ROWCOUNT_BIG ROWCOUNT_BIG()

Returnerer antall tabellrader som ble behandlet av den siste Transact-SQL-setningen utført av systemet. Returverdien er av typen BIGINT.

SKILT SIGN(n)

Returnerer tegnet til n som et tall: +1 hvis det er positivt, -1 hvis det er negativt.

SQRT, FIRKANT SQRT(n), SQUARE(n)

SQRT(n) - beregner kvadratroten av tallet n, SQUARE(n) - returnerer kvadratet av argumentet n.

Datofunksjoner

Datofunksjoner evaluerer de tilsvarende dato- eller tidsdelene av et uttrykk eller returnerer en tidsintervallverdi. Datofunksjonene som støttes i Transact-SQL og deres korte beskrivelser er gitt i tabellen nedenfor:

Transact-SQL datofunksjoner
Funksjon Syntaks Beskrivelse Eksempel på bruk
GETDATE GETDATE()

Returnerer gjeldende systemdato og -klokkeslett.

VELG GETDATE()

DATODEL DATEPART (vare, dato)

Returnerer datodelen angitt i elementparameteren som et heltall.

Returnerer 1 (januar) SELECT DATEPART(month, "01/01/2012") -- Returnerer 4 (onsdag) SELECT DATEPART(weekday, "01/02/2012")

DATENAME DATENAME (vare, dato)

Returnerer datodelen spesifisert i elementparameteren som en tegnstreng.

Returnerer januar SELECT DATENAME(måned, "01/01/2012") -- Returnerer onsdag SELECT DATENAME(ukedag, "01/02/2012")

DATODIFF DATEDIFF (element, dat1, dat2)

Beregner forskjellen mellom to datodeler dat1 og dat2 og returnerer et heltallsresultat i enhetene spesifisert i elementargumentet.

Returnerer 19 (19 års intervall mellom datoer) VELG DATODIFF(år, "01/01/1990", "01/01/2010") -- Returnerer 7305 (7305 dagers intervall mellom datoer) VELG DATODIFF(dag, "01/01 /1990", "01/01" .2010")

DATEADD DATEADD (vare, n, dato)

Legger til det n-te antallet enheter spesifisert i elementargumentet til den angitte datoen. (n kan også være negativ.)

Legger til 3 dager til gjeldende dato SELECT DATEADD(dag, 3, GETDATE())

Strengefunksjoner

Strengfunksjoner manipulerer kolonneverdier, som vanligvis er tegndatatyper. De støttede strengfunksjonene i Transact-SQL og deres korte beskrivelser er gitt i tabellen nedenfor:

Transact-SQL strengfunksjoner
Funksjon Syntaks Beskrivelse Eksempel på bruk
ASCII, UNICODE ASCII(char), UNICODE(char)

Konverterer det angitte tegnet til det tilsvarende ASCII-kodeheltallet.

VELG ASCII("W") -- 87 VELG UNICODE("u") -- 1102

CHAR, NCHAR CHAR(int), NCHAR(int)

Konverterer en ASCII-kode (eller Unicode hvis NCHAR) til riktig tegn.

VELG CHAR(87) -- "W" VELG NCHAR(1102) -- "yu"

CHARINDEX CHARINDEX (str1, str2)

Returnerer startposisjonen for forekomsten av delstrengen str1 i strengen str2. Hvis strengen str2 ikke inneholder delstrengen str1, returneres verdien 0

Returnerer 5 SELECT CHARINDEX ("morf", "polymorfisme")

FORSKJELL FORSKJELL (str1, str2)

Returnerer et heltall mellom 0 og 4 som er forskjellen mellom SOUNDEX-verdiene til de to strengene str1 og str2. SOUNDEX-metoden returnerer et tall som karakteriserer lyden til strengen. Ved å bruke denne metoden kan du identifisere lignende klingende strenger. Fungerer kun for ASCII-tegn.

Returnerer 2 VELG FORSKJELL ("staving", "forteller")

VENSTRE HØYRE VENSTRE (str, lengde), HØYRE (str, lengde)

Returnerer antallet første tegn i strengen str spesifisert av lengdeparameteren for LEFT og de siste lengdetegnene i strengen str for HØYRE-funksjonen.

DECLARE @str nvarchar(30) = "Synkronisering"; -- Returnerer "Sync" SELECT LEFT(@str, 4) -- Returnerer "Zation" SELECT RIGHT(@str, 5)

LEN LEN(str)

Returnerer antall tegn (ikke antall byte) av strengen str spesifisert i argumentet, inkludert etterfølgende mellomrom.

NEDRE ØVRE LOWER(str), UPPER(str)

LOWER-funksjonen konverterer alle store bokstaver i str1 til små bokstaver. Små bokstaver og andre tegn som er inkludert i strengen, påvirkes ikke. UPPER-funksjonen konverterer alle små bokstaver i strengen str til store bokstaver.

DECLARE @str nvarchar(30) = "Synkronisering"; -- Returnerer "SYNCHRONIZATION" SELECT UPPER(@str) -- Returnerer "synch" SELECT LOWER(@str)

LTRIM, RTRIM LTRIM(str), RTRIM(str)

LTRIM-funksjonen fjerner innledende mellomrom i strengen str, henholdsvis RTRIM fjerner mellomrom på slutten av strengen.

QUOTENAME QUOTENAME(char_string)

Returnerer en Unicode-kodet streng med avgrensningstegn lagt til for å konvertere inndatastrengen til en gyldig separert identifikator.

DECLARE @str nvarchar(30) = "Synkronisering"; -- Returner "[Sync]" VELG QUOTENAME(@str)

PATINDEX PATINDEX (%p%, expr)

Returnerer startposisjonen til den første forekomsten av mønsteret p i gitt expr, eller null hvis mønsteret ikke finnes.

Returnerer 4 SELECT PATINDEX("%chro%", "Synkronisering")

ERSTATTE ERSTATT (str1, str2, str3)

Erstatter alle forekomster av delstrengen str2 i strengen str1 med delstrengen str3.

Returnerer "Desynkronisering" SELECT REPLACE("Synkronisering", "Synkronisering", "Desynkronisering")

GJENSKAPE REPLICATE (str, i)

Gjentar strengen str i ganger.

Returnerer "aBaBaBaBaB" SELECT REPLICATE("aB", 5)

OMVENDT REVERSE (str)

Skriver ut strengen str i omvendt rekkefølge.

Returnerer "yaitsazinorkhniS" SELECT REVERSE("Synkronisering")

SOUNDEX SOUNDEX (str)

Returnerer en fire-tegns soundex-kode som brukes til å bestemme om to strenger er like. Fungerer kun for ASCII-tegn.

ROM SPACE (lengde)

Returnerer en streng med mellomrom med lengden spesifisert i lengdeparameteren. Ligner på REPLICATE(" ", lengde).

STR STR (f[, len[, d]])

Konverterer det angitte flyttallsuttrykket f til en streng, der len er lengden på strengen, inkludert desimaltegn, tegn, sifre og mellomrom (standard er 10), og d er antall desimaler som skal returneres.

Returnerer "3.14" SELECT STR (3.1415, 4, 2)

TING TING (str1, a, lengde, str2)

Fjerner lengdetegn fra streng str1, starter ved posisjon a, og setter inn streng str2 i deres plass.

Notat i en bok SELECT TING("Notatbok", 5, 0," i en ") -- Håndbok SELECT TING("Notatbok", 1, 4, "Hånd")

SUBSTRING SUBSTRING (str1, a, lengde)

Trekker ut fra strengen str, fra posisjon a, en delstreng med lengdelengde.

Systemfunksjoner

Transact-SQL-systemfunksjoner gir omfattende informasjon om databaseobjekter. De fleste systemfunksjoner bruker en intern numerisk identifikator (ID) som tilordnes hvert databaseobjekt når det opprettes. Ved å bruke denne identifikatoren kan systemet identifisere hvert databaseobjekt unikt.

Tabellen nedenfor viser noen av de viktigste systemfunksjonene sammen med deres korte beskrivelser:

Transact-SQL-systemfunksjoner
Funksjon Syntaks Beskrivelse Eksempel på bruk
CAST CAST (w AS type [(lengde)]

Konverterer uttrykk w til den angitte datatypetypen (hvis mulig). Argumentet w kan være et hvilket som helst gyldig uttrykk.

Returnerer 3 SELECT CAST (3,1258 AS INT)

SAMMEN COALESCE (a1, a2)

Returnerer den første uttrykksverdien fra listen over uttrykk a1, a2, ... som ikke er null.

COL_LENGTH COL_LENGTH (obj, col)

Returnerer lengden på kolonnekolonnen til databaseobjektet (tabell eller visning) obj.

Returnerer 4 SELECT COL_LENGTH("Ansatt", "Id")

KONVERTERE KONVERTER (type[(lengde)], w)

Tilsvarer CAST-funksjonen, men argumentene er spesifisert annerledes. Kan brukes med alle datatyper.

CURRENT_TIMESTAMP CURRENT_TIMESTAMP

Returnerer gjeldende dato og klokkeslett.

NÅVÆRENDE BRUKER NÅVÆRENDE BRUKER

Returnerer navnet på gjeldende bruker.

DATALENGDE DATALENGTH(z)

Returnerer antall byte som er okkupert av uttrykket z.

Denne spørringen returnerer lengden på hvert felt SELECT DATAENGTH(FirstName) FROM Employee

GETANSINUL GETANSINULL("dbnavn")

Returnerer 1 hvis bruken av nullverdier i databasen dbname samsvarer med ANSI SQL-standarden.

ISNULL ISNULL (utløpsdato, verdi)

Returnerer verdien av expr hvis den ikke er NULL; ellers returneres verdien.

ISNUMERISK ISNUMERIC (utløpsdato)

Bestemmer om uttrykket expr er en gyldig numerisk type.

NYHET NYHET()

Oppretter en unik identifikasjonsnummer-ID som består av en 16-byte binær streng designet for å lagre verdier av datatypen UNIQUEIDENTIFIER.

NYHETSSEKVENSID NEWSEQUENTIALID()

Oppretter en GUID som er større enn noen annen GUID som tidligere er opprettet av denne funksjonen på den angitte datamaskinen. (Denne funksjonen kan bare brukes som standardverdi for en kolonne.)

NULLIF NULLIF (uttr1, uttr2)

Returnerer null hvis verdiene til expr1 og expr2 er de samme.

Spørringen returnerer NULL for et prosjekt -- hvis nummer = "p1" VELG NULLIF(Tall, "p1") FRA prosjekt

SERVERPROPERTY SERVERPROPERTY (eiendomsnavn)

Returnerer informasjon om databaseserveregenskaper.

SYSTEM_USER SYSTEM_USER

Returnerer IDen til gjeldende bruker.

BRUKER-ID BRUKER-ID()

Returnerer bruker-ID-brukernavnet. Hvis ingen bruker er spesifisert, returneres gjeldende bruker-ID.

USER_NAME USER_NAME()

Returnerer brukernavnet med spesifisert id. Hvis en identifikator ikke er spesifisert, returneres gjeldende brukers navn.

Metadatafunksjoner

I utgangspunktet returnerer metadatafunksjoner informasjon om en spesifisert database og databaseobjekter. Tabellen nedenfor oppsummerer noen av de viktigste metadatafunksjonene sammen med deres korte beskrivelser:

Transact-SQL-metadatafunksjoner
Funksjon Syntaks Beskrivelse Eksempel på bruk
COL_NAME COL_NAME (tab_id, col_id)

Returnerer navnet på kolonnen med den spesifiserte identifikatoren col_id for tabellen med identifikatoren tab_id.

Returnerer navnet på kolonnen «Etternavn» SELECT COL_NAME (OBJECT_ID(«Ansatt»), 3)

KOLONNEIENDOM COLUMNPROPERTY (id, col, property)

Returnerer informasjon om den angitte kolonnen.

Returnerer verdien av PRECISION-egenskapen -- for Id-kolonnen i Employee-tabellen SELECT COLUMNPROPERTY (OBJECT_ID("Employee"), "Id", "presisjon")

DATABASE-EIENDOM DATABASEPROPERTY (database, eiendom)

Returnerer verdien av databaseegenskapen.

Returnerer verdien til IsNullConcat-egenskapen -- for SampleDb-databasen SELECT DATABASEPROPERTY ("SampleDb", "IsNullConcat")

DB_ID DB_ID()

Returnerer database-ID-en db_name. Hvis et databasenavn ikke er spesifisert, returneres IDen til gjeldende database.

DB_NAME DB_NAME()

Returnerer navnet på databasen som har db_id. Hvis en identifikator ikke er spesifisert, returneres navnet på gjeldende database.

INDEX_COL INDEX_COL (tabell, i, nei)

Returnerer navnet på den indekserte kolonnen i tabelltabellen. En kolonne er indikert med indeksidentifikator i og kolonneposisjonsnummer i den indeksen.

INDEKSEIENDOM INDEXPROPERTY (obj_id, index_name, property)

Returnerer egenskapene til en navngitt indeks eller statistikk for det angitte tabell-ID-nummeret, navnet på indeksen eller statistikken og navnet på egenskapen.

OBJECT_NAME OBJECT_NAME (obj_id)

Returnerer navnet på databaseobjektet som har identifikatoren obj_id.

VELG OBJECT_NAME(245575913);

OBJECT_ID OBJECT_ID (obj_name)

Returnerer objektidentifikatoren obj_navn til databasen.

Returnerer 245575913 - Ansatttabell ID SELECT OBJECT_ID("Ansatt")

OBJEKTEIENDOM OBJECTPROPERTY (obj_id, property)

Returnerer informasjon om objekter fra gjeldende database.

SQL-strengfunksjoner

Denne gruppen av funksjoner lar deg manipulere tekst. Det er mange strengfunksjoner, vi skal se på de vanligste.
  • CONCAT(str1,str2...) Returnerer en streng opprettet ved å sette sammen argumentene (argumentene står i parentes - str1,str2...). For eksempel, i vår leverandørtabell er det en By-kolonne og en Adresse-kolonne. Anta at vi vil at den resulterende tabellen skal ha Adresse og By i samme kolonne, dvs. vi ønsker å kombinere data fra to kolonner til én. For å gjøre dette bruker vi CONCAT()-strengfunksjonen, og som argumenter vil vi angi navnene på kolonnene som skal kombineres - by og adresse:

    SELECT CONCAT(by, adresse) FRA leverandører;


    Vær oppmerksom på at sammenslåingen skjedde uten deling, noe som er lite lesbart. La oss justere søket vårt slik at det er et mellomrom mellom kolonnene som slås sammen:

    SELECT CONCAT(by; " ", adresse) FRA leverandører;


    Som du kan se, regnes et mellomrom også som et argument og er angitt atskilt med komma. Hvis det var flere kolonner som skulle slås sammen, ville det vært irrasjonelt å spesifisere mellomrom hver gang. I dette tilfellet kan man bruke strengfunksjonen CONCAT_WS(separator, str1,str2...), som plasserer en skilletegn mellom de sammenkoblede strengene (separatoren er spesifisert som det første argumentet). Vår spørring vil da se slik ut:

    SELECT CONCAT_WS(" ", by, adresse) FRA leverandører;

    Resultatet endret seg ikke eksternt, men hvis vi skulle slå sammen 3 eller 4 kolonner, ville koden bli betydelig redusert.


  • INSERT(str; pos; len; ny_str) Returnerer strengen str med delstrengen som starter ved posisjon pos og har en lengde på len-tegn erstattet av delstrengen new_str. Anta at vi bestemmer oss for ikke å vise de første 3 tegnene i adressekolonnen (forkortelser st., pr., etc.), så erstatter vi dem med mellomrom:

    SELECT INSERT(adresse, 1, 3, " ") FRA leverandører;


    Det vil si at tre tegn, fra det første, erstattes med tre mellomrom.


  • LPAD(str, len, dop_str) Returnerer strengen str, venstre polstret med dop_str til lengden len. La oss si at vi ønsker å vise leverandørbyer til høyre og fylle den tomme plassen med prikker:

    VELG LPAD(by, 15, "."") FRA leverandører;



  • RPAD(str, len, dop_str) Returnerer strengen str, høyrepolstret med dop_str til lengden len. La oss si at vi vil vise leverandørbyer til venstre, og fylle den tomme plassen med prikker:

    SELECT RPAD(by, 15, "."") FRA leverandører;


    Vær oppmerksom på at len-verdien begrenser antall tegn som vises, dvs. hvis bynavnet er lengre enn 15 tegn, blir det avkortet.


  • LTRIM(str) Returnerer strengen str med alle innledende mellomrom fjernet. Denne strengfunksjonen er praktisk for riktig visning av informasjon i tilfeller der tilfeldige mellomrom er tillatt ved inntasting av data:

    VELG LTRIM(by) FRA leverandører;


  • RTRIM(str) Returnerer strengen str med alle etterfølgende mellomrom fjernet:

    VELG RTRIM(by) FRA leverandører;

    I vårt tilfelle var det ingen ekstra mellomrom, så vi vil ikke se resultatet eksternt.


  • TRIM(str) Returnerer strengen str med alle innledende og etterfølgende mellomrom fjernet:

    VELG TRIM(by) FRA leverandører;


  • LOWER(str) Returnerer strengen str med alle tegn konvertert til små bokstaver. Det fungerer ikke riktig med russiske bokstaver, så det er bedre å ikke bruke det. La oss for eksempel bruke denne funksjonen på bykolonnen:

    VELG by, LAVERE(by) FRA leverandører;


    Se hva slags gobbledygook det viste seg å være. Men alt er bra med det latinske alfabetet:

    SELECT LOWER("BY");



  • UPPER(str) Returnerer strengen str med alle tegn konvertert til store bokstaver. Det er også bedre å ikke bruke det med russiske bokstaver. Men alt er bra med det latinske alfabetet:

    VELG ØVRE (e-post) FRA kunder;



  • LENGTH(str) Returnerer lengden på strengen str. La oss for eksempel finne ut hvor mange tegn det er i leverandøradressene våre:

    VELG adresse, LENGDE(adresse) FRA leverandører;



  • VENSTRE(str, len) Returnerer len venstre tegn i strengen str. La for eksempel bare de tre første tegnene vises i leverandørbyer:

    VELG navn, VENSTRE(by, 3) FRA leverandører;



  • HØYRE(str, len) Returnerer len høyre tegn i strengen str. La for eksempel bare de tre siste tegnene vises i leverandørbyer: SELECT LOAD_FILE("C:/proverka");
    Vær oppmerksom på at du må spesifisere den absolutte banen til filen.

Som allerede nevnt er det mange flere strengfunksjoner, men til og med noen av de som er omtalt her, brukes ekstremt sjelden. La oss derfor avslutte med å vurdere dem her og gå videre til mer vanlig brukte dato- og klokkeslettfunksjoner.

I denne delen skal vi snakke om funksjoner for å jobbe med tekstinformasjon som kan brukes i spørringer og programkode i PL/SQL-språket.

Funksjon CONCAT(strl; str2)

Denne funksjonen kobler sammen strengene strl og str2. Hvis ett av argumentene er NULL, behandles det som en tom streng. Hvis begge argumentene er NULL, returnerer funksjonen NULL. Eksempel:

SELECT CONCAT("Presten hadde en hund") x1,
CONCATCTest", NULL) x2,
CONCAT(NULL; "Test") x3,
CONCAT(NULL, NULL) x4
FRA dual

Presten hadde en hund

For å sette sammen strenger støtter Oracle en spesiell sammenkoblingsoperator "||" som fungerer på samme måte som CONCAT-funksjonen, for eksempel:

SELECT CONCAT("Presten "hadde en hund") x1, "Presten " || "hadde en hund" x2
FRA dual

Sammenkoblingsoperatoren "||", som tilsvarer å kalle CONCAT-funksjonen, skal ikke forveksles med "+"-operatoren som brukes i aritmetiske operasjoner. I Oracle er dette forskjellige operatører, men på grunn av automatisk typestøping er subtile feil mulige, for eksempel:

VELG "5" + "3" x1
FRA dual

I dette tilfellet returneres den numeriske verdien 8 i stedet for tekststrengen "53". Dette er fordi når Oracle oppdager den aritmetiske operatoren "+", prøver den automatisk å kaste argumentene til type NUMBER.

Funksjon LOWER(str)

LOWER-funksjonen konverterer alle tegn i str til små bokstaver. Eksempel:

VELG LAVERE("TEKSTDATA") X
FRA dual

FunksjonØVRE(str)

UPPER-funksjonen konverterer alle tegn i strengen str til store bokstaver. Eksempel:

SELECT UPPER("TEKSTDATA") X
FRA dual

INITCAP(str) funksjon

Returnerer strengen str med de første bokstavene i alle ord konvertert til store bokstaver. Funksjonen er praktisk for å formatere hele navnet når du bygger rapporter. Eksempel:

VELG INITCAPCIVANOV peter sidorovich") X
FRA dual

FunksjonerLTRIM(str [,sett])OgRTRIM(str [,sett])

LTRIM-funksjonen fjerner alle tegn fra begynnelsen av en streng til det første tegnet som ikke er i det angitte tegnsettet. Som standard består settet av et enkelt mellomrom og kan ikke spesifiseres. RTRIM-funksjonen ligner på LTRIM, men fjerner tegn fra slutten av strengen. La oss se på noen eksempler:

VELG LTRIM("TekstDATA") X1,
LTRIM(" _ # TeXt DATA", " #_") X2,
LTRIM(" 1234567890 TekstDATA", " 1234567890") X3
FRA dual

Funksjon REPLACE(str; søk_str; [,erstatt_str])

REPLACE-funksjonen søker etter et search_str-mønster i strengen str og erstatter hver forekomst funnet med replace_str. Som standard er replace_str den tomme strengen, så å kalle REPLACE med to argumenter fjerner alle forekomster som er funnet. Søket etter en understreng skiller mellom store og små bokstaver. Eksempel:

SELECT REPLACE("Presten hadde en hund", "hund", "katt") x1,
REPLACE("Presten hadde en ond hund", "ond") x2,
REPLACE("Presten hadde en hund", "Hund", "Katt") x3
FRA dual

Presten hadde en katt

Presten hadde en hund

Presten hadde en hund

Funksjon TRANSLATE(str, fra_maske, til_maske)

TRANSLATE-funksjonen analyserer strengen str og erstatter alle tegnene som vises i from_mask-strengen med de tilsvarende tegnene fra to_mask. For at funksjonen skal fungere riktig, må from_mask og to_mask-strengene være like lange, eller from_mask-strengen må være lengre enn to_mask. Hvis from_mask er lengre enn to_mask, og mens du behandler strengen str, blir det funnet tegn som samsvarer med et av from_mask-tegnene, og det ikke er noe samsvar for dem i to_mask, vil slike tegn bli fjernet fra strengen str. Hvis du sender fra_maske eller til_maske lik NULL, vil funksjonen returnere NULL. Sammenligningen skilles mellom store og små bokstaver.

SELECT TRANSLATE("Test 12345", "e2\"E!") x1,
TRANSLATE("Test 12345", "e234", "E") x2
FRA dual

Denne funksjonen er praktisk for å løse en rekke praktiske problemer knyttet til tegnkonvertering eller søk etter forbudte tegn. Du må for eksempel analysere et passord og finne ut om det inneholder minst ett siffer. Implementeringen av denne sjekken ved å bruke TRANSLATE ser slik ut:

IF TRANSLATE(PassWd, "0123456789", "*") = PassWd THEN
ADD_ERR0R("Feil - Passord må inneholde minst ett siffer!");
RETUR 1;
SLUTT OM;

Et annet eksempel: et tall forberedes for konvertering til NUMBER. Det er nødvendig å erstatte desimalskilletegnene "," og "." på "." og fjern mellomrom. Implementeringen av denne operasjonen ved å bruke TRANSLATE ser slik ut:

SELECT TRANSLATE("123 455.23", "., ", " . . ") x1,
TRANSLATE("-123 455.23", "., ", " . . ") x2
FRA dual

Funksjon SUBSTR(str; m [,n])

SUBSTR-funksjonen returnerer et fragment av strengen str, som starter med tegnet m, med en lengde på n tegn. Lengden kan utelates - i dette tilfellet returneres strengen fra tegnet m til slutten av strengen str. Tegn nummereres fra 1. Hvis du angir m = 0, vil kopieringen fortsatt starte fra det første tegnet. Angivelse av en negativ verdi for m fører til at tegn telles fra slutten av strengen i stedet for fra begynnelsen. Å spesifisere verdier av m som er større i absolutt verdi enn lengden på strengen fører til at funksjonen returnerer NULL.

SELECT SUBSTR("Presten hadde en hund", 13) x1,
SUBSTR("Presten hadde en hund", -6) x2,
SUBSTR("Dette er testtekst", 5, 8) x3,
SUBSTR("Presten hadde en hund", 150) x4
FRA dual

tekst

Funksjon INSTR(str, søk_str [,n[,m]])

INSTR-funksjonen returnerer posisjonen til det første tegnet m-ro i strengfragmentet str som samsvarer med search_str. Sammenligningen utføres fra det n-te tegnet i strengen str. sammenligningen skiller mellom store og små bokstaver. Som standard er n = m = 1, det vil si at søket utføres fra begynnelsen av linjen og posisjonen til det første fragmentet som ble funnet, returneres. Hvis søket mislykkes, returnerer funksjonen 0.

SELECT INSTR("y rumpa var en hund", "hund") x1,
INSTR("y rumpa var en hund", "katt") x2,
INSTR("Dette er tekst for å demonstrere tekstsøk", "tekst", 1, 2) x3,
INSTR(‘11111000000001; "1", 7) x4
FRA dual

Med denne funksjonen, som med alle andre i Oracle, blir det ofte gjort vanlige feil knyttet til håndtering av NULL-verdier. Hvis str=NULL, vil funksjonen returnere NULL, ikke null! Dette må tas i betraktning ved konstruksjon av ulike forhold. For eksempel tar ikke dette fragmentet av et PL/SQL-program hensyn til denne funksjonen:

HVIS INSTR(TXT_VAR,"*") = 0 DERETTER
...
SLUTTHVIS;

I dette tilfellet vil det være riktig å skrive slik:

HVIS NVL(INSTR(TXT_VAR, "*"), 0) = 0 DA
...
SLUTT OM;

LENGDE (str) og LENGTHB (str) funksjoner

LENGTH(str)-funksjonen returnerer lengden på strengen str i tegn. For en tom streng og en NULL-verdi returnerer funksjonen NULL, så det anbefales å bruke NVL sammen med denne funksjonen.

SELECT LENGTH("Presten hadde en hund") x1,
LENGTH("") x2,
LENGTH(NULL) x3,
NVL(LENGDE(""), 0) x4
FRA dual

LENGTHB-funksjonen ligner på LENGTH-funksjonen, men returnerer lengden på strengen i byte.

ASCII(str) funksjon

Returnerer ASCII-verdien til det første tegnet i strengen str når du bruker ASCII-tegnkoding, og verdien til den første byten av et multibyte-tegn når du bruker multibyte-tegnkoding. Eksempel:

VELG ASCII("Test") x1 FRA dual

Funksjon CHR(n)

Returnerer et tegn etter koden.

VELG CHR(64) x1
FRA dual