Sql dodaje znakove na početak stringa. O funkcijama SQL stringova ili kako manipulirati tekstom u MySQL bazi podataka

Osnovne funkcije niza i operatori pružaju razne opcije i kao rezultat vraćaju vrijednost stringa. Neke funkcije niza su dvoelementne, što znači da mogu raditi na dva niza u isto vrijeme. SQL 2003 standard podržava nizove funkcije.

operator konkatenacije

SQL 2003 definira operator konkatenacije (||) koji spaja dva odvojena niza u jednu vrijednost niza.

DB2 platforma

DB2 platforma podržava SQL 2003 operator konkatenacije, kao i njegov sinonim, funkciju CONCAT.

MySQL platforma

MySQL platforma podržava funkciju CONCATQ, sinonim za SQL 2003 operator konkatenacije.

Oracle i PostgreSQL

PostgreSQL i Oracle platforme podržavaju SQL 2003 operator konkatenacije dvostruke vertikalne trake.

SQL Server platforma

Platforma SQL Server koristi znak plus (+) kao sinonim za operator konkatenacije SQL 2003. SQL Server ima sistemski parametar CONCAT_NULL_YIELDS_NULL, koji kontrolira kako se sistem ponaša kada se naiđu NULL vrijednosti kada se konkateniraju vrijednosti niza.

/* SQL 2003 sintaksa */

string || string2 || string3

string1string2string3

/* Za MySQL */

CONCAT("stringl", "string2")

Ako je bilo koja od spojenih vrijednosti null, tada se vraća prazan niz. Također, ako je numerička vrijednost uključena u konkatenaciju, ona se implicitno pretvara u vrijednost niza.

SELECT CONCAT("Moja", "bolonja", "ima", "a", "prvo", "ime...");

Moja bolonja ima ime

SELECT CONCAT("Moj ", NULL, "ima ", "prvi ", "ime...");

PRETVORI i PREVODI

Funkcija CONVERT mijenja prikaz niza znakova unutar skupa znakova i razvrstavanja. Na primjer, funkcija CONVERT se može koristiti za promjenu broja bitova po znaku.

Funkcija TRANSLATE prevodi vrijednost niza iz jednog skupa znakova u drugi. Na primjer, funkcija TRANSLATE se može koristiti za pretvaranje vrijednosti iz engleskog skupa znakova u skup znakova kanji (japanski) ili ćirilični (ruski). Sam prijevod mora već postojati, bilo prema zadanim postavkama ili kreiran naredbom CREATE TRANSLATION.

SQL 2003 sintaksa

PRETVORI (vrijednost_znaka KORIŠĆENJEM char_convert_name)

TRANSLATE(value_character_value USING translation_name)

Funkcija CONVERT pretvara vrijednost znakova u skup znakova s ​​imenom navedenim u parametru character_conversion_name. Funkcija TRANSLATE pretvara vrijednost znakova u skup znakova naveden u translation_name.

Među razmatranim platformama, samo Oracle podržava funkcije CONVERT i TRANSLATE kako su definirane u standardu SQL 2003. Oracleova implementacija funkcije TRANSLATE je vrlo slična, ali nije identična, SQL 2003. U ovoj implementaciji, funkcija uzima samo dva argumenta i samo prevodi između skupa znakova baze podataka i skupa znakova omogućenog za lokalizaciju.

MySQL implementacija funkcije CONV samo pretvara brojeve iz jedne baze u drugu. U SQL Serveru, međutim, implementacija funkcije CONVERT je vrlo bogata i mijenja tip podataka izraza, ali se u svim ostalim aspektima razlikuje od standardne funkcije CONVERT SQL 2003. PostgreSQL platforma ne podržava funkciju CONVERT, a implementacija funkcije TRANSLATE pretvara sva pojavljivanja niza znakova u bilo koji drugi niz znakova.

DB2

DB2 platforma ne podržava funkciju CONVERT, a podrška za funkciju TRANSLATE nije kompatibilna s ANSI. Funkcija TRANSLATE se koristi za pretvaranje podnizova i povijesno je bila sinonim za funkciju UPPER jer je funkcija UPPER tek nedavno dodana u DB2. Ako se funkcija TRANSLATE koristi u DB2 s argumentom izraza jednog znaka, rezultat je isti niz konvertiran u velika slova. Ako se funkcija koristi s više argumenata, kao što je TRANSLATE(ucmo4HUK, zamijeni, podudaranje), tada će funkcija konvertirati sve znakove u izvoru koji se također nalaze u parametru podudaranja. Svaki znak u izvoru koji je na istoj poziciji kao parametar podudaranja bit će zamijenjen znakom iz parametra zamjene. Ispod je primjer.

TRANSLATE("Zdravo, svijet!") "ZDRAVO; SVIJETE!"

TRANSLATE("Halo, World1", "wZ", "1W") "Hewwo, Zorwd1

MySQL

MySQL platforma ne podržava funkcije TRANSLATE i CONVERT.

Oracle

Oracle platforma podržava sljedeću sintaksu za funkcije CONVERT i TRANSLATE.

U Oracle implementaciji, funkcija CONVERT vraća tekst vrijednosti znakova konvertiran u target_character_set. Parametar character_value je niz koji se konvertuje, parametar target_charset je ime skupa znakova u koji se niz treba pretvoriti, a parametar source_charset je skup znakova u kojem je vrijednost niza izvorno pohranjena.

Funkcija TRANSLATE u Oracleu je u skladu sa ANSI sintaksom, ali možete odabrati samo jedan od dva skupa znakova: skup znakova baze podataka (CHARJCS) i skup znakova za podršku nacionalnom jeziku (NCHARJZS).

Oracle također podržava još jednu funkciju koja se također zove TRANSLATE (bez korištenja ključna riječ KORIŠĆENJE). Ova funkcija TRANSLATE nema nikakve veze s konverzijom skupa znakova.

Imena ciljnih i izvornih skupova znakova mogu se proslijediti ili kao konstante niza ili kao referenca na stupac tablice. Imajte na umu da kada pretvarate niz u skup znakova koji ne prikazuje sve konvertovane znakove, možete zamijeniti zamjenske znakove.

Oracle podržava nekoliko uobičajenih skupova znakova, koji uključuju US7ASCII, WE8DECDEC. WE8HP, F7DEC, WE8EBCDIC500, WE8PC850u WE8ISO8859PI. Na primjer:

SELECT CONVERT("Gro2", "US7ASCII", "WE8HP") IZ DUAL;

PostgreSQL

PostgreSQL platforma podržava ANSI CONVERT izraz, a konverzije se ovdje mogu definirati pomoću naredbe CREATE CONVERSION. PostgreSQL implementacija funkcije TRANSLATE pruža prošireni skup funkcija koje vam omogućavaju da konvertujete bilo koji tekst u drugi tekst unutar navedenog niza.

PREVODI (niz znakova, from_text, to_text)

Evo nekoliko primjera:

SELECT TRANSLATE("12345abcde", "5a", "XX"); "1234XXbcde" SELECT TRANSLATE(title, "Computer", "PC") FROM titles WHERE type="Personal_computer" SELECT CONVERT("PostgreSQL" USING iso_8859_1_to_utf_8) "PostgreSQL"

SQL Server

SQL Server platforma ne podržava funkciju TRANSLATE. SQL Server implementacija funkcije CONVERT ne prati standard SQL 2003. Ova funkcija je ekvivalentna funkciji CAST u SQL Serveru.

PRETVORI (tip podataka[(dužina) | (preciznost, razmjer)], izraz, stil])

Stil klauzule se koristi za definiranje formata konverzije datuma. Iza Dodatne informacije pogledajte dokumentaciju SQL Servera. Ispod je primjer.

SELECT naslov, CONVERT(char(7), ytd_sales) FROM naslova ORDER BY title GO

U ovom dijelu ćemo govoriti o funkcijama rada s tekstualnim informacijama koje se mogu koristiti u upitima i programski kod u PL/SQL.

Funkcija CONCAT(strl, str2)

Ova funkcija spaja nizove strl i str2. Ako je jedan od argumenata NULL, tada se tretira kao prazan niz. Ako su oba argumenta NULL, tada funkcija vraća NULL. primjer:

SELECT CONCAT("Svećenik\"imao psa") x1,
CONCATCTtest" , NULL) x2,
CONCAT(NULL, "Test") x3,
CONCAT(NULL, NULL) x4
FROM dual

Papa je imao psa

Za konkatenaciju nizova, Oracle podržava poseban operator konkatenacije "||" koji radi slično funkciji CONCAT, na primjer:

SELECT CONCAT("Svećenik\"imao psa") x1, "Svećenik" || "imao psa" x2
FROM dual

Nemojte miješati operator konkatenacije "||", što je ekvivalentno pozivanju funkcije CONCAT, i operator "+" koji se koristi u aritmetičkim operacijama. U Oracleu jeste različiti operateri, ali zbog automatskog određivanja tipa moguće su suptilne greške, na primjer:

SELECT "5" + "3" x1
FROM dual

U ovom slučaju vraća se numerička vrijednost 8, a ne tekstualni niz"53". To je zbog činjenice da, nakon što je detektovao aritmetičku operaciju "+", Oracle automatski pokušava prebaciti argumente na tip NUMBER.

LOWER(str) funkcija

Funkcija LOWER pretvara sve znakove stringa str u mala slova. primjer:

SELECT LOWER("TEKST PODACI") X
FROM dual

FunkcijaGORNJA(str)

Funkcija UPPER pretvara sve znakove u stringu u velika slova. primjer:

SELECT UPPER("Text DATA") X
FROM dual

INITCAP(str) funkcija

Vraća string str s prvim slovima svih riječi pretvorenim u velika slova. Funkcija je korisna za formatiranje punog imena prilikom izrade izvještaja. primjer:

SELECT INITCAPCIvanov Petr Sidorovich") X
FROM dual

FunkcijeLTRIM(str[,set])IRTRIM(str[,set])

Funkcija LTRIM uklanja sve znakove od početka niza do prvog znaka koji nije u skupu znakova. Po defaultu, set se sastoji od jednog razmaka i može se izostaviti. Funkcija RTRIM je slična LTRIM-u, ali uklanja znakove s kraja niza. Pogledajmo nekoliko primjera:

SELECT LTRIM(" TeXt DATA") X1,
LTRIM(" _ # TeXt DATA", " #_") X2,
LTRIM(" 1234567890 TEKST PODACI", " 1234567890") X3
FROM dual

REPLACE(str, search_str, [,replace_str]) funkcija

Funkcija REPLACE traži obrazac search_str u stringu str i zamjenjuje svako pojavljivanje sa replace_str. Po defaultu, replace_str je prazan niz, tako da pozivanje funkcije REPLACE s dva argumenta uklanja sva pronađena pojavljivanja. Pretraga podniza je osjetljiva na velika i mala slova. primjer:

ODABIR ZAMJENA("Svećenik je imao psa", "pas", "mačka") x1,
ZAMIJENI("Sveštenik je imao ljutog psa", "zlo") x2,
ZAMJENI("Svećenik je imao psa", "Psa", "Mačka") x3
FROM dual

Papa je imao mačku

Papa je imao psa

Papa je imao psa

Funkcija TRANSLATE(str, from_mask, to_mask)

Funkcija TRANSLATE analizira string str i zamjenjuje sve znakove u nizu from_mask odgovarajućim znakovima iz to_mask. Da bi funkcija ispravno radila, nizovi from_mask i to_mask moraju biti iste dužine, ili from_mask string mora biti duži od to_mask. Ako je from_mask duži od to_mask, a tokom obrade stringa str, pronađu se znakovi koji odgovaraju jednom od znakova iz from_mask, a za njih nema podudaranja u to_mask, tada će takvi znakovi biti uklonjeni iz string str. Ako proslijedite from_mask ili to_mask jednako NULL, tada će funkcija vratiti NULL. Poređenje je osjetljivo na velika i mala slova.

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

Ova funkcija je pogodna za rješavanje niza praktičnih problema vezanih za konverziju znakova ili traženje zabranjenih znakova. Na primjer, trebate analizirati lozinku i otkriti sadrži li barem jedan broj. Implementacija ove provjere pomoću TRANSLATE izgleda ovako:

IF TRANSLATE(PassWd, "0123456789", "*") = PassWd THEN
ADD_ERR0R("Greška - Lozinka mora sadržavati najmanje jedan broj!");
RETURN 1;
END IF;

Drugi primjer: priprema se broj za konverziju u BROJ. Morate zamijeniti decimalne separatore "," i "." na "." i uklonite razmake. Implementacija ove operacije pomoću TRANSLATE izgleda ovako:

SELECT TRANSLATE("123 455.23", "., ", " . . ") x1,
TRANSLATE("-123 455,23", "., ", " . . ") x2
FROM dual

Funkcija SUBSTR(str, m[,n])

Funkcija SUBSTR vraća fragment stringa str, počevši od znaka m dužine n znakova. Dužina se može izostaviti - u ovom slučaju, string se vraća od znaka m do kraja stringa str. Znakovi su numerisani od 1. Ako navedete m = 0, kopiranje će i dalje početi od prvog znaka. Navođenje negativne vrijednosti za m uzrokuje da se znakovi broje od kraja niza, a ne od početka. Navođenje m vrijednosti koje su veće od dužine niza u apsolutnoj vrijednosti uzrokuje da funkcija vrati NULL.

SELECT SUBSTR("Svećenik je imao psa", 13) x1,
SUBSTR("Sveštenik je imao psa", -6) x2,
SUBSTR("Ovo je probni tekst", 5, 8) x3,
SUBSTR("Sveštenik je imao psa", 150) x4
FROM dual

tekst

Funkcija INSTR(str, pretraga_str [,n[,m]])

Funkcija INSTR vraća poziciju prvog znaka m-ro fragmenta stringa str koji odgovara stringu search_str. Poređenje se vrši od n-tog karaktera stringa str, poređenje je osjetljivo na velika i mala slova. Podrazumevano, n = m = 1, to jest, pretraga se vrši od početka niza i vraća se pozicija prvog pronađenog fragmenta. Ako pretraga ne uspije, funkcija vraća 0.

SELECT INSTR("y dupe je bio pas", "pas") x1,
INSTR("y dupe je bio pas", "mačka") x2,
INSTR("Ovo je tekst za demonstraciju pretraživanja teksta", "tekst", 1, 2) x3,
INSTR('11111000000001", "1", 7) x4
FROM dual

Kod ove funkcije, kao i kod svih ostalih u Oracleu, često se prave tipične greške vezane za rukovanje NULL vrijednosti. Ako str=NULL, onda će funkcija vratiti NULL, a ne nulu! Ovo se mora uzeti u obzir prilikom izgradnje različitih uslova. Na primjer, ovaj fragment PL/SQL programa ne uzima u obzir ovu osobinu:

IF INSTR(TXT_VAR,"*") = 0 ONDA
...
KRAJIF;

U ovom slučaju bi bilo ispravno napisati ovako:

IF NVL(INSTR(TXT_VAR, "*"), 0) = 0 THEN
...
END IF;

LENGTH(str) i LENGTHB(str) funkcije

Funkcija LENGTH(str) vraća dužinu stringa str u znakovima. Za prazan niz i vrijednost NULL, funkcija vraća NULL, pa se preporučuje korištenje NVL-a s ovom funkcijom.

SELECT LENGTH("Sveštenik je imao psa") x1,
LENGTH("") x2,
LENGTH(NULL) x3,
NVL(DUŽINA(""), 0) x4
FROM dual

Funkcija LENGTHB je slična funkciji LENGTH, ali vraća dužinu niza u bajtovima.

ASCII(str) funkcija

Vraća ASCII kod prvog znaka str kada se koristi ASCII kodiranje i vrijednost prvog bajta višebajtnog karaktera kada se koristi višebajtno kodiranje znakova. primjer:

SELECT ASCII("Test") x1 IZ dual

CHR(n) funkcija

Vraća znak po njegovom kodu.

SELECT CHR(64) x1
FROM dual

Za druge. Ima sljedeću sintaksu:

CONV(broj,N,M)

Argument broj je u brojevnom sistemu sa osnovom N. Funkcija ga konvertuje u brojevni sistem sa bazom M i vraća vrednost kao niz.

Primjer 1

Sljedeći upit pretvara broj 2 iz decimalnog u binarni:

SELECT CONV(2,10,2);

Rezultat: 10

Za pretvaranje broja 2E iz heksadecimalne u decimalni, potreban je upit:

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

Rezultat: 46

Funkcija CHAR() prevodi ASCII kod u nizove. Ima sljedeću sintaksu:

CHAR(n1,n2,n3..)

Primjer 2

SELECT CHAR(83,81,76);

Rezultat: SQL

Sljedeće funkcije vraćaju dužinu niza:

  • LENGTH(string);
  • OCTET_LENGTH(niz);
  • CHAR_LENGTH(niz);
  • CHARACTER_LENGTH(niz).

Primjer 3

SELECT LENGTH("MySQL");

Rezultat: 5

Ponekad korisna funkcija BIT_LENGTH(niz), koji vraća dužinu niza u bitovima.

Primjer 4

SELECT BIT_LENGTH("MySQL");

Rezultat: 40

Funkcije podniza

Podniz je obično dio niza. Često želite da znate poziciju prvog pojavljivanja podniza u nizu. Postoje tri funkcije koje rješavaju ovaj problem u MySQL-u:

  • LOCATE(podniz, niz [,pozicija]);
  • POSITION(podniz, niz);
  • INSTR(niz, podniz).

Ako podniz nije sadržan u stringu, tada sve tri funkcije vraćaju 0. Funkcija INSTR() razlikuje se od druge dvije po redoslijedu svojih argumenata. Funkcija LOCATE() može sadržavati treći argument pozicija, koji vam omogućava da tražite podniz u nizu ne od početka, već od navedene pozicije.

Primjer 5

SELECT LOCATE("Topaz", "Topaz");

Rezultat: 31

SELECT POSITION("Topaz", "Topaz");

Rezultat: 31

SELECT INSTR("Topaz",'Topaz');

Rezultat: 31

SELECT LOCATE("Topaz", "Tvornica Topaz i LLC Topaz", 9);

Rezultat: 20

SELECT LOCATE("Dijamant", "Topaz");

Rezultat: 0

Funkcije LIJEVO (linija, N) I DESNO(niz, N) vrati krajnje lijevo i krajnje desno N karaktera u nizu, respektivno.

Primjer 6

SELECT LEFT("MySQL DBMS", 4);

Rezultat: DBMS

SELECT RIGHT("MySQL DBMS", 5);

Rezultat: MySQL

Ponekad morate dobiti podniz koji počinje na određenoj poziciji. Za to se koriste sljedeće funkcije:

  • SUBSTRING(string, pozicija, N);
  • MID(string, pozicija, N).

Obje funkcije vraćaju N karaktera datog niza, počevši od date pozicije.

Primjer 7

SELECT SUBSTRING("MySQL DBMS je jedan od najpopularnijih DBMS", 6,5);

Rezultat: MySQL

Kada radite sa adresama e-pošte i adresama web stranica, ova funkcija je vrlo korisna. SUBSTR_INDEX(). Funkcija ima tri argumenta:

SUBSTR_INDEX(niz, graničnik, N).

N argument može biti pozitivan ili negativan. Ako je negativan, tada funkcija pronalazi N-to pojavljivanje graničnika, računajući s desna. Zatim vraća podniz koji se nalazi desno od pronađenog graničnika. Ako je N pozitivan, tada funkcija pronalazi N-to pojavljivanje graničnika s lijeve strane i vraća podniz lijevo od pronađenog graničnika.

Primjer 8

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

Rezultat: www.mysql

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

Rezultat: mysql.com

Funkcija REPLACE(niz, podniz1, podniz2) omogućava vam da zamijenite sva pojavljivanja podniza1 u nizu sa podnizom2.

Iz knjige Windows Registry autor Klimov A

Brzi završetak Windows radi(Windows NT/2000/XP) Windows NT verzije 3.1 i 3.5 omogućile su zatvaranje svih procesa za 20 sekundi. U Windows NT 3.51 i novijim verzijama, moguće je odrediti količinu vremena koje bi sistemu trebalo da bude potrebno da se isključi. Da biste to učinili, morate popraviti ključ

Iz knjige Obrada baza podataka na Visual basic®.NET autor McManus Geoffrey P

POGLAVLJE 3 Predstavljanje SQL Servera 2000 U prošlosti su mnogi programeri počeli da prave aplikacije baze podataka koristeći Visual Basic jezik i SQL Server 2000 bazu podataka. Microsoft podaci Pristup sa Jet jezgrom. Čim je baza podataka narasla na nekoliko hiljada zapisa ili je nekoliko njenih usluga pristupilo

Iz knjige Windows skripta Host za Windows 2000/XP autor Popov Andrej Vladimirovič

Zahtevi za instalaciju SQL Servera 2000 Da biste instalirali SQL Server 2000, potreban vam je računar sa Pentium (ili kompatibilnim) procesorom sa frekvencijom od najmanje 166 MHz, prostorom na hard disku od 95 do 270 MB (270 MB za tipičnu instalaciju i 44 MB za Desktop Engine), disk drajv

Iz knjige Šta ne piše u Delphi knjigama autor Grigoriev A. B.

Instalacija SQL Servera 2000 Nakon što odaberete računar sa željenom konfiguracijom, možete nastaviti sa instalacijom. Općenito, proces instalacije SQL Servera 2000 je vrlo jednostavan, sa sljedećim izuzecima: traje dugo; tokom procesa instalacije, u početku se mnogo pita

Iz autorovog PHP priručnika

Osnove SQL Servera 2000 Nakon instalacije i SQL pokretanje Server mora izvršiti sljedeće korake prije nego što nastavi sa preuzimanjem ili spremanjem podataka: kreirati jednu ili više baza podataka; kreirati tabele u bazi podataka; kreiraju prikaze i pohranjuju

Iz XSLT knjige autor Holzner Stephen

Funkcije za rad sa nizovima A2.17 prikazuje funkcije pomoću kojih možete kreirati nove nizove i dobiti informacije o postojećim.Tabela A2.17. Funkcije niza Funkcija Opis Niz(arglist) Vraća vrijednost Variant koja je

Iz knjige o Linuxu: Kompletan vodič autor Kolisničenko Denis Nikolajevič

3.3. Suptilnosti rada sa stringovima U ovom odeljku ćemo pogledati neke suptilnosti rada sa stringovima, koje nam omogućavaju da bolje razumemo koji kod kompajler generiše za neke naizgled elementarne akcije. Ne rade svi ovdje navedeni primjeri drugačije nego

Iz knjige The Art of Shell Scripting Programming od Coopera Mendela

Iz knjige The C Language - A Beginner's Guide autor Prata Stephen

XPath funkcije za rad sa stringovima Sljedeće XPath funkcije za rad sa stringovima su dostupne u XSLT-u: concat(string string1, string string2,...). Vraća konkatenaciju (uniju) svih nizova koji su mu proslijeđeni; sadrži(string string1, string string2). Vraća true ako prvi red sadrži (sadrži) drugi

Iz knjige Linux i UNIX: programiranje ljuske. Vodič za programere. autor Tainsley David

23.2.2. Memorijske funkcije Glibove memorijske funkcije obavljaju iste radnje kao i njihove odgovarajuće funkcije C. Evo njihovih prototipova: gpointer g_malloc(gulong size);gpointer g_realloc(gpointer mem, gulong size);void g_free(gpointer

Iz knjige Opis jezika PascalABC.NET autor RuBoard tim

Iz knjige autora

13. Nizovi znakova i funkcije na nizovima

Iz knjige autora

FUNKCIJE NIZA Većina C biblioteka nudi funkcije koje rade na nizovima. Pogledajmo četiri najkorisnija i najčešća: strlen(), strcat(), strcmp() i strcpy(). Već smo koristili funkciju strlen() koja pronalazi dužinu niza.

Iz knjige autora

Iz knjige autora

Potprogrami za rad sa znakovima i stringovima funkcija Chr(a: byte): char; Pretvara kod u funkciju znakova kodiranu u Windows-u ChrUnicode(a: word): char; Pretvara kod u funkciju Unicode karaktera OrdUnicode(a: char): word; Pretvara znak u funkciju Unicode koda UpperCase(ch: char): char;

Iz knjige autora

Funkcije boja Tip boje boje je sinonim za System.Drawing.Color. funkcija RGB(r,g,b: bajt): Boja; Vraća boju koja sadrži komponente crvene (r), zelene (g) i plave (b) (r,g i b - u rasponu od 0 do 255) funkcija ARGB(a,r,g,b: bajt): Boja ; Vraća boju koja sadrži

Evo kompletna lista funkcije niza preuzete iz BOL-a:

Rezultat je 11. Da bismo saznali koja su to slova, možemo koristiti funkciju CHAR, koja vraća znak zadat poznati ASCII kod (od 0 do 255):

A evo kako, na primjer, možete dobiti tabelu kodova za sve abecedne znakove:

SELECT CHAR(ASCII("a")+ num-1) slovo, ASCII("a")+ num - 1 FROM (SELECT 5*5*(a-1)+5*(b-1) + c AS broj IZ (SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 4 UNION ALL SELECT 5) x UNAPREZNI SPOJ (SELECT 1 b UNION ALL SELECT 2 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) y UNAPREZNI SPOJ ( SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) z) x GDJE ASCII("a")+ num -1 IZMEĐU ASCII("a") I ASCII("z")

Oni koji još nisu svjesni generiranja numeričkog niza, pozivam se na odgovarajući članak.

Kao što znate, kodovi malih i velikih slova se razlikuju. Stoga, da biste dobili cijeli set bez ponovnog pisanja upita, samo trebate dodati sličan kod iznad:

Vjerujem da neće biti teško dodati ovo pismo u tabelu, ako je potrebno.

Razmotrimo sada problem pronalaženja željenog podniza u string izrazu. Za to se mogu koristiti dvije funkcije - CHARINDEX I PATINDEX. Oba vraćaju početnu poziciju (poziciju prvog znaka podniza) podniza u nizu. Funkcija CHARINDEX ima sintaksu:

CHARINDEX ( izraz_pretraživanja, string_expression[, start_position])

Ovdje je opcijski cjelobrojni parametar start_position specificira poziciju u string izrazu iz koje se traži izraz_pretraživanja. Ako je ovaj parametar izostavljen, pretraga se vrši od početka string_expression. Na primjer, zahtjev

Treba napomenuti da ako je traženi podniz ili izraz stringa NULL, tada će rezultat funkcije također biti NULL.

Sljedeći primjer određuje položaj prvog i drugog pojavljivanja znaka "a" u nazivu broda "Kalifornija"

A evo, na primjer, kako možete pronaći nazive brodova koji sadrže niz od tri znaka, od kojih je prvi i posljednji "e":

Parna soba za LIJEVO funkcija PRAVO vraća zadati broj znakova desno od string izraza:

DESNO(<string izraz>,<broj znakova>)

Na primjer, evo kako možete odrediti imena brodova koji počinju i završavaju istim slovom:

Ovdje razdvajamo ime klase i naziv broda razmakom. Osim toga, kako ne bismo ponovili cijelu konstrukciju kao argument funkcije, koristimo potupit. Rezultat će izgledati ovako:

Da biste isključili ovaj slučaj, možete koristiti još jedan korisna funkcija len (<string izraz>) , koji vraća broj znakova u nizu. Ograničavamo se na slučaj kada je broj znakova veći od jednog:

Funkcija REPLICATE dodaje konstantu "abcde" sa pet razmaka na desnoj strani, koje funkcija ne uzima u obzir LEN, - u oba slučaja dobijamo 5.
Funkcija DATAENGTH vraća broj bajtova u prikazu varijable i pokazuje nam razliku između tipova CHAR i VARCHAR. DATAENGTHće nam dati 12 za CHAR i 10 za VARCHAR.
Kao što je očekivano, DATAENGTH za VARCHAR varijablu, vraća stvarnu dužinu varijable. Ali zašto je rezultat 12 za varijablu tipa CHAR? Poenta je da je CHAR tip fiksna dužina. Ako je vrijednost varijable manja od njene dužine, a mi smo deklarirali dužinu kao CHAR(12), tada će vrijednost varijable biti "poravnana" sa potrebnom dužinom dodavanjem razmaka na kraju.

Na stranici postoje zadaci u kojima je potrebno poredati (pronaći maksimum, itd.) numeričkim redoslijedom vrijednosti prikazane u tekstualni format. Na primjer, broj sjedišta aviona ("2d") ili CD brzina ("24x"). Problem je što je tekst sortiran ovako (uzlazno)

Ako je potrebno rasporediti mjesta uzlaznim redoslijedom redova, redoslijed bi trebao biti sljedeći

Ako se ograničimo na ovo, onda ćemo dobiti

Ostaje da se sortira



Učitavanje...
Top