Az SQL karaktereket ad a sor elejére. SQL karakterlánc-függvények – használati példák. Szimbolikus függvények sql nyelven
Továbbra is tanulmányozzuk az SQL lekérdezési nyelvet, és ma erről fogunk beszélni SQL karakterlánc-függvények... Leírjuk az alapvető és gyakran használt karakterlánc-függvényeket, mint például: LECSERÉLÉS, NYÍRÁS, CSERÉLÉSés mások, mindent meg fogunk vizsgálni, természetesen példákon keresztül.
SELECT név || vezetéknév AS FIO FROM táblázatból
Vagy szóközzel való elválasztáshoz írja be
SELECT név || "" || vezetéknév AS FIO FROM táblázatbólazok. két függőleges sáv két oszlopot egyesít egybe, és hogy szóközzel elválasztjam őket, szóközt teszek közéjük ( bármilyen karakter használható, például kötőjel vagy kettőspont) aposztrófokkal és két függőleges sávval kombinálva ( A Transact-SQL a + jelet használja két függőleges sáv helyett).
INITCAP funkció
Aztán van egy nagyon hasznos funkció is, INITCAP- amely visszaadja az értéket egy karakterláncban, amelyben minden szó nagybetűvel kezdődik és kisbetűvel folytatódik. Erre akkor van szükség, ha nem követed az egyik vagy másik oszlop kitöltési szabályait, és hogy az egészet szép formában jelenítsd meg, használhatod ezt a funkciót, például a táblázatodban a név oszlopban lévő rekordok a következő űrlapot: IVAN ivanov vagy petr Petrov, ezt a funkciót használja.
SELECT INITCAP (név) AS FIO FROM FROM
És így fogod kapni.
UPPER funkció
Egy hasonló függvény, csak minden nagybetűs karaktert ad vissza, ez az FELSŐ.
SELECT UPPER (név) AS FIO FROM FROM
- név - az oszlop neve;
- 20 - karakterek száma ( mező hossza);
- A „-” egy karakter, amelyet a kívánt számú karakterre ki kell tölteni.
RPAD funkció
Tekintsük rögtön az inverz függvényt. RPAD- a művelet és a szintaxis megegyezik az LPAD-éval, csak a jobb oldali karakterek vannak kitöltve ( a bal oldali LPAD-ban).
SELECT RPAD (név, 20, "-") AS név FROM táblából
Iván —————- |
Szergej ----- |
LTRIM funkció
A Next is hasznos funkció bizonyos esetekben, LTRIM- ez a funkció eltávolítja a megadott bal szélső karaktereket. Például van egy „város” oszlop az adatbázisában, amelyben a város „Moszkva”-ként van feltüntetve, és vannak olyan városok is, amelyek egyszerűen „Moszkva”-ként vannak feltüntetve. De a jelentést csak "Moszkva" formában kell megjelenítenie "g" nélkül. Csak megad valamiféle "g" mintát és ha a bal szélső karakterek "g"-vel kezdődnek, akkor ezek a karakterek egyszerűen nem jelennek meg.
SELECT LTRIM (város, "város") AS gorod FROM asztalból
Ez a funkció beolvassa a bal oldali karaktereket, ha a sor elején nincs karakter a mintában, akkor visszaadja a cella eredeti értékét, ha van, akkor törli azokat.
RTRIM funkció
Vessünk egy pillantást az inverz függvényre is. RTRIM- ugyanaz, mint az LTRIM, csak a karaktereket keresi a jobb oldalon.
Jegyzet! A Transact-SQL-ben az RTRIM és az LTRIM függvények eltávolítják a szóközöket jobbról, illetve balról.
REPLACE funkció
Most nézzünk meg egy olyan érdekes függvényt, mint CSERE- egy karakterláncot ad vissza, amelyben az összes egyező karakter az Ön által megadott karakterekre lesz cserélve. Mire használható, például az adatbázisában vannak olyan oszlopok, amelyekben néhány elválasztó szimbólum található, például "/". Például: Ivan / Ivanov, és szeretné megjeleníteni az Ivan-Ivanovot, majd írjon
SELECT REPLACE (név, "/", "-") FROM táblázatból
és lesz egy szimbólumcsere.
Ez a függvény csak a karakterek teljes egyezését helyettesíti, ha például "-"-t ad meg, pl. csak három kötőjelet fog keresni, és nem cserél le minden egyes gondolatjelet, ellentétben a következő funkcióval.
TRANSLATE funkció
FORDÍT- egy karakterlánc-függvény, amely a karakterlánc összes karakterét lecseréli az Ön által megadott karakterekre. A függvény neve alapján sejthető, hogy ez egy teljes soremelés. A különbség e függvény és a REPLACE között az, hogy minden megadott karaktert lecserél, pl. Három karaktered van, mondjuk az abc és a TRANSLATE segítségével le tudod cserélni abc-re, így a = a, b = b, c = c lesz, és ennek az elvnek megfelelően minden egyezésű karakter lecserélődik. És ha a REPLACE-re cserélte, akkor csak a sorban elhelyezkedő abc szimbólumok teljes egyezését kereste.
SUBSTR funkció
SUBSTR- ez a függvény csak a megadott karaktertartományt adja vissza. Más szóval, mondjuk egy 10 karakterből álló sztringet, és nem kell mind a tíz, de tegyük fel, hogy csak 3-8 ( a harmadiktól a nyolcadikig). Ezzel a funkcióval ezt könnyen megteheti. Például van egy fix hosszúságú azonosítója az adatbázisban (például AA-BB-55-66-CC), és minden karakterkombináció jelent valamit. És egy szép pillanatban azt mondták neked, hogy csak 2 és 3 karakterkombinációt jeleníts meg, ehhez írj egy lekérdezést a következő formában.
SELECT SUBSTR (ident, "4", "8") FROM táblázatból
azok. minden karaktert kinyomtatunk, 4-től 8-ig, és a lekérdezés után ezt kapjuk:
LENGTH függvény - húrhossz
A következő funkció is jól jöhet, az HOSSZ- ami csak számolja a karakterek számát egy sorban. Például meg kell találni, hogy hány karakter van egy oszlop egyes celláiban, mondjuk "név", egy ilyen táblázat.
SELECT LENGTH (név) FROM táblázatbólezt a kérést követően megkapja ezt.
4 |
6 |
7 |
Itt vagyunk veled, és megvizsgáltuk az alapvető SQL karakterlánc-függvényeket. A következő cikkekben folytatjuk az SQL feltárását.
SQL karakterlánc-függvények
Ez a funkciócsoport lehetővé teszi a szöveg kezelését. Számos karakterlánc-függvény létezik, a leggyakoribbakat tekintjük át.- CONCAT (str1, str2 ...) Az argumentumok összefűzésével létrehozott karakterláncot ad vissza (az argumentumok zárójelben vannak megadva - str1, str2 ...). Például a szállítói táblázatunkban van egy város és egy cím oszlop. Tegyük fel, hogy azt szeretnénk, hogy a cím és a város ugyanabban az oszlopban jelenjen meg a kapott táblázatban, pl. két oszlop adatait szeretnénk egyesíteni egybe. Ehhez a CONCAT () string függvényt fogjuk használni, és argumentumként megadjuk a kombinált oszlopok nevét - város és cím:
SELECT CONCAT (város, cím) szállítóktól;
Vegye figyelembe, hogy az összevonás szétválasztás nélkül történt, ami nem túl olvasható. Módosítsuk a lekérdezésünket úgy, hogy az egyesített oszlopok között szóköz legyen:
SELECT CONCAT (város, "", cím) a szállítóktól;
Mint látható, a szóköz is érvnek számít, és vesszővel választják el. Ha több oszlopot kellene összekötni, akkor irracionális lenne minden alkalommal szóközt feltüntetni. Ebben az esetben használhatjuk a string függvényt CONCAT_WS (határoló, str1, str2...), amely elválasztót helyez el az összefűzendő karakterláncok közé (az elválasztó az első argumentumként van megadva). A kérésünk ekkor így nézne ki:
SELECT CONCAT_WS ("", város, cím) szállítóktól;
Az eredmény kívülről nem változott, de ha 3 vagy 4 oszlopot összefűznénk, akkor a kód jelentősen csökkenne.
- INSERT (str, pos, len, new_str) Visszaadja azt az str karakterláncot, amelyben a pos pozícióból kezdődő és a len karakterek hosszúságú részkarakterláncát a new_str részkarakterláncra cserélték. Tegyük fel, hogy úgy döntünk, hogy nem jelenítjük meg az első 3 karaktert a cím oszlopban (rövidítések st., Stb. stb.), akkor ezeket szóközökre cseréljük:
SELECT INSERT (cím, 1, 3, "") A szállítóktól;
Ez azt jelenti, hogy az elsővel kezdődő három karaktert három szóközzel helyettesítjük.
- LPAD (str, len, dop_str) Az str karakterláncot adja vissza, a dop_str karakterrel balra kitöltve len hosszúságúra. Tegyük fel, hogy azt szeretnénk, hogy a beszállítói városok a jobb oldalon legyenek a beszállítói városok megjelenítésekor, és az üres helyet pontokkal töltsük ki:
LPAD SELECT (város, 15, ".") A szállítóktól;
- RPAD (str, len, dop_str) Az str karakterláncot adja vissza, a dop_str karakterrel jobbra kitömve len hosszúságúra. Tegyük fel, hogy azt szeretnénk, ha a beszállító városok a bal oldalon legyenek, és a beszállítói városok megjelenítésekor az üres helyet töltsük ki pontokkal:
RPAD VÁLASZTÁSA (város, 15, ".") A szállítóktól;
Vegye figyelembe, hogy a len korlátozza a megjelenítendő karakterek számát, pl. ha a város neve 15 karakternél hosszabb, akkor a rendszer csonkolja.
- LTRIM (str) Az str karakterláncot adja vissza, az összes kezdő szóköz eltávolításával. Ez a karakterlánc funkció kényelmes az információk helyes megjelenítéséhez olyan esetekben, amikor az adatok megadásakor megengedettek a véletlenszerű szóközök:
SELECT LTRIM (város) FROM szállítók;
- RTRIM (str) Az str karakterláncot adja vissza az összes záró szóköz eltávolításával:
SELECT RTRIM (város) a szállítóktól;
Esetünkben nem volt több szóköz, így kifelé nem fogjuk látni az eredményt.
- TRIM (str) Az str karakterláncot adja vissza az összes kezdő és záró szóköz eltávolításával:
SELECT TRIM (város) FROM szállítók;
- LOWER (str) Az str karakterláncot adja vissza, az összes karaktert kisbetűvé alakítva. Nem működik megfelelően az orosz betűkkel, ezért jobb, ha nem használja. Alkalmazzuk például ezt a függvényt a város oszlopra:
VÁLASSZA ki várost, LOWER (város) az eladóktól;
Látod, milyen halandzsa lett belőle. De a latin ábécével minden rendben van:
SELECT LOWER ("VÁROS");
- UPPER (str) Az str karakterláncot adja vissza, minden karakterrel nagybetűvel. Orosz betűkkel is jobb, ha nem használjuk. De a latin ábécével minden rendben van:
SELECT UPPER (e-mail) AZ ügyfelektől;
- LENGTH (str) Az str karakterlánc hosszát adja vissza. Például nézzük meg, hány karakter van a beszállítói címeinkben:
SELECT cím, LENGTH (cím) FROM szállítók;
- LEFT (str, len) Az str karakterlánc len bal karaktereit adja vissza. Tegyük fel például, hogy csak az első három karakter jelenik meg a szállító városokban:
SELECT név, BALRA (város, 3) A szállítóktól;
- RIGHT (str, len) Az str string len jobb karaktereit adja vissza. Tegyük fel például, hogy csak az utolsó három karakter jelenik meg a szállító városokban: SELECT LOAD_FILE ("C: / proverka");
Kérjük, vegye figyelembe, hogy meg kell adnia a fájl abszolút elérési útját.
Mások. A következő szintaxissal rendelkezik:
CONV (szám, N, M)
Érv szám A függvény M bázissá alakítja, és az értéket karakterláncként adja vissza.
1. példa
A következő lekérdezés a decimális 2-es számot binárissá alakítja:
SELECT CONV (2,10,2);
Pozíció: 10
A 2E szám hexadecimálisról decimálisra konvertálásához a következő lekérdezés szükséges:
SELECT CONV ("2E", 16.10);
Pozíció: 46
Funkció CHAR () lefordítja az ASCII kódot karakterláncokká. A következő szintaxissal rendelkezik:
CHAR (n1, n2, n3 ..)
2. példa
SELECT CHAR (83.81.76);
Eredmény: SQL
A következő függvények egy karakterlánc hosszát adják vissza:
- HOSSZ (húr);
- OCTET_LENGTH (karakterlánc);
- CHAR_LENGTH (karakterlánc);
- CHARACTER_LENGTH (karakterlánc).
3. példa
SELECT LENGTH ("MySQL");
Eredmény: 5
Néha hasznos funkció BIT_LENGTH (karakterlánc) amely visszaadja a karakterlánc hosszát bitekben.
4. példa
SELECT BIT_LENGTH ("MySQL");
Pozíció: 40
Funkciók részkarakterláncokkal való munkához
Az alkarakterláncot általában egy karakterlánc egy részének nevezik. Gyakran meg kell találni egy részkarakterlánc első előfordulásának helyét a karakterláncban. Három függvény oldja meg ezt a problémát a MySQL-ben:
- LOCATE (részkarakterlánc, karakterlánc [, pozíció]);
- HELYZET (részkarakterlánc, karakterlánc);
- INSTR (karakterlánc, részkarakterlánc).
Ha az alsztring nem szerepel a karakterláncban, akkor mindhárom függvény 0 értéket ad vissza. Az INSTR () függvény argumentumai sorrendjében különbözik a másik kettőtől. A LOCATE () függvénynek lehet egy harmadik argumentuma pozíció, amely lehetővé teszi, hogy egy karakterláncban egy részstringet ne az elejétől, hanem egy megadott pozícióból keressen.
5. példa
SELECT LOCATE ("Topaz", "Open Joint Stock Company Topaz");
Pozíció: 31
POZÍCIÓ KIVÁLASZTÁSA ("Topaz", "Topáz nyílt részvénytársaság");
Pozíció: 31
SELECT INSTR ("Topaz Nyílt Részvénytársaság", "Topaz");
Pozíció: 31
HELYET KIVÁLASZTÁS ("Topaz", "Topaz Plant and Topaz LLC", 9);
Pozíció: 20
SELECT LOCATE ("Almaz", "Open Joint Stock Company Topaz");
Eredmény: 0
Funkciók BAL (karakterlánc, N)és JOBBRA (karakterlánc, N) visszaadja a bal szélső, illetve a jobb szélső N karaktert a karakterláncban.
6. példa
SELECT LEFT ("MySQL DBMS", 4);
Eredmény: DBMS
JOBBRA KIVÁLASZTÁS ("MySQL DBMS", 5);
Eredmény: MySQL
Néha olyan részkarakterláncot szeretne kapni, amely egy adott pozícióban kezdődik. Ehhez a következő funkciókat kell használni:
- SUBSTRING (karakterlánc, pozíció, N);
- MID (húr, pozíció, N).
Mindkét függvény a megadott karakterlánc N karakterét adja vissza, a megadott pozíciótól kezdve.
7. példa
SELECT SUBSTRING ("A MySQL DBMS az egyik legnépszerűbb DBMS", 6,5);
Eredmény: MySQL
Ha e-mail címekkel és webhelycímekkel dolgozik, a funkció nagyon hasznos SUBSTR_INDEX ()... A függvénynek három argumentuma van:
SUBSTR_INDEX (karakterlánc, határoló, N).
Az N argumentum lehet pozitív vagy negatív. Ha negatív, akkor a függvény megkeresi a határoló N-edik előfordulását, jobbról számolva. Ezután visszaadja a talált határolótól jobbra lévő részstringet. Ha N pozitív, akkor a függvény megkeresi a bal oldali határoló N-edik előfordulását, és visszaadja a talált határolótól balra lévő részstringet.
8. példa
SUBSTRING_INDEX KIVÁLASZTÁSA ("www.mysql.ru", ".", 2);
Eredmény: www.mysql
SUBSTRING_INDEX KIVÁLASZTÁSA ("www.mysql.ru", ".", - 2);
Eredmény: mysql.ru
Funkció CSERE (karakterlánc, karakterlánc1, részkarakterlánc2) lehetővé teszi, hogy az 1. rész összes előfordulását egy karakterláncban lecserélje a string2 karakterláncra.
Az alapvető karakterlánc-függvények és operátorok számos lehetőséget biztosítanak, és ennek eredményeként egy karakterlánc-értéket adnak vissza. Egyes karakterlánc-függvények kételemesek, ami azt jelenti, hogy egyszerre két karakterláncon is működhetnek. Az SQL 2003 szabvány támogatja a karakterlánc-függvényeket.
Összefűzési operátor
Az SQL 2003 meghatározza az összefűzési operátort (||), amely két különálló karakterláncot egyetlen karakterlánc-értékké fűz össze.
DB2 platform
A DB2 platform támogatja az SQL 2003 összefűzési operátort és annak szinonimáját, a CONCAT függvényt.
MySQL platform
A MySQL platform támogatja a CONCATQ függvényt, amely az SQL 2003 összefűzési operátor szinonimája.
Oracle és PostgreSQL
A PostgreSQL és az Oracle platformok támogatják az SQL 2003 dupla függőleges sáv összefűzési operátorát.
SQL Server platform
Az SQL Server platform a plusz jelet (+) használja az SQL 2003 összefűzési operátorának szinonimájaként. Az SQL Server biztosítja a CONCAT_NULL_YIELDS_NULL rendszerparamétert, amely vezérli a rendszer viselkedését, amikor NULL értékeket észlel a karakterláncértékek összefűzésekor.
/ * SQL 2003 szintaxis * /
stringl || string2 || string3
karakterlánc1karakterlánc2karakterlánc3
/ * MySQL esetén * /
CONCAT ("stringl", "string2")
Ha az összefűzött értékek bármelyike üres, akkor a rendszer egy üres karakterláncot ad vissza. Ezen túlmenően, ha egy numerikus érték is részt vesz az összefűzésben, akkor az implicit módon karaktersorozattá alakul.
SELECT CONCAT ("Saját", "bologna", "van", "a", "első", "név ...");
A bolognámnak van egy keresztneve
SELECT CONCAT ("Saját", NULL, "van", "első", "név ...");
KONVERTÁLÁS és FORDÍTÁS
A CONVERT funkció megváltoztatja a karaktersorozat megjelenítését a karakterkészleten belül és a leválogatást. Például a CONVERT függvény használható a karakterenkénti bitek számának megváltoztatására.
A TRANSLATE függvény egy karakterlánc értéket fordít le egyik karakterkészletből a másikba. Például a TRANSLATE funkcióval az angol karakterkészletből a kanji (japán) vagy cirill (orosz) karakterkészletre konvertálható az érték. Magának a fordításnak már léteznie kell – vagy az alapértelmezettnek, vagy a CREATE TRANSLATION paranccsal létrehozva.
SQL 2003 szintaxis
KONVERT (karakter_érték HASZNÁLATA karakter_konverzió_neve)
FORDÍTÁS (char_value USING translation_name)
A CONVERT függvény a karakterértéket a karakterkonverzió_neve paraméterben megadott névvel rendelkező karakterkészletté alakítja. A TRANSLATE függvény a karakterértéket a fordításnévben megadott karakterkészletre konvertálja.
A figyelembe vett platformok közül csak az Oracle támogatja az SQL 2003 szabványban meghatározott CONVERT és TRANSLATE függvényeket.Az Oracle TRANSLATE funkciója nagyon hasonló, de nem azonos az SQL 2003-val. Ebben a megvalósításban a függvény csak két argumentumot vesz fel, és csak az adatbázis karakterkészlete és a nemzeti nyelvet támogató karakterkészlet között fordít le.
A CONV függvény MySQL implementációja csak a számokat konvertálja egyik bázisról a másikra. De az SQL Serverben a CONVERT függvény megvalósítása nagyon gazdag funkciókban és megváltoztatja a kifejezés adattípusát, de minden más szempontból eltér az SQL 2003 szabvány CONVERT függvényétől A PostgreSQL platform nem támogatja a CONVERT funkciót. függvényt, és a TRANSLATE függvény megvalósítása egy karakterlánc összes előfordulását bármely más karakterláncra konvertálja.
Db2
A DB2 platform nem támogatja a CONVERT funkciót, és a TRANSLATE funkció támogatása nem ANSI-kompatibilis. A TRANSLATE függvény részkarakterláncok konvertálására szolgál, és történelmileg az UPPER függvény szinonimája, mivel az UPPER függvény csak nemrég került hozzáadásra a DB2-hez. Ha a TRANSLATE függvényt a DB2-ben egyetlen karakteres kifejezési argumentummal használja, az eredmény ugyanaz a karakterlánc lesz nagybetűssé konvertálva. Ha a függvényt több argumentummal együtt használjuk, például TRANSLATE (ucmo4HUK, csere, egyezés), akkor a függvény a forrás összes olyan karakterét konvertálja, amely a match paraméterben is szerepel. A forrás minden olyan karaktere, amely az egyezési paraméterrel azonos pozícióban van, lecserélődik a helyettesítő paraméterből származó karakterre. Alább egy példa.
FORDÍTÁS ("Hello, World!") "HELLO; WORLD!"
FORDÍTÁS ("Hello, World1", "wZ", "1W") "Hewwo, Zorwd1
MySQL
A MySQL platform nem támogatja a TRANSLATE és CONVERT funkciókat.
Jóslat
Az Oracle platform a következő szintaxist támogatja a CONVERT és TRANSLATE funkciókhoz.
Az Oracle megvalósításban a CONVERT függvény egy karakterérték szövegét adja vissza, célkarakterkészletté alakítva. A karakter_érték a konvertálandó karakterlánc, a cél_karakterkészlet annak a karakterkészletnek a neve, amelyre a karakterláncot konvertálni kell, a forráskarakterkészlet pedig az a karakterkészlet, amelyben a karakterlánc értéke eredetileg tárolva volt.
Az Oracle TRANSLATE funkciója ANSI szintaxist követ, de két karakterkészlet közül csak egyet választhat: az adatbázis karakterkészletét (CHARJCS) és a nemzeti nyelv által támogatott karakterkészletet (NCHARJZS).
Az Oracle egy másik funkciót is támogat, más néven TRANSLATE (a USING kulcsszó használata nélkül). Ennek a TRANSLATE funkciónak semmi köze a karakterkészlet-átalakításhoz.
A cél és a forrás karakterkészlet neve karakterlánc-konstansként vagy táblázatoszlopra való hivatkozásként is átadható. Vegye figyelembe, hogy amikor egy karakterláncot olyan karakterkészletre konvertál, amely nem jeleníti meg az összes konvertálandó karaktert, helyettesítheti a helyettesítő karaktereket.
Az Oracle számos általános karakterkészletet támogat, köztük az US7ASCII, WE8DECDEC készleteket. WE8HP, F7DEC, WE8EBCDIC500, WE8PC850u WE8ISO8859PI. Például:
SELECT CONVERT ("Gro2", "US7ASCII", "WE8HP") FROM DUAL;
PostgreSQL
A PostgreSQL platform támogatja az ANSI CONVERT utasítást, és a konverziók itt a CREATE CONVERSION paranccsal definiálhatók. A TRANSLATE függvény PostgreSQL implementációja a függvények kiterjesztett készletét biztosítja, amelyek lehetővé teszik bármely szöveg más szöveggé konvertálását egy megadott karakterláncon belül.
TRANSLATE (karakterlánc, szövegből, szövegre)
Íme néhány példa:
SELECT TRANSLATE ("12345abcde", "5a", "XX"); "1234XXbcde" SELECT TRANSLATE (cím, "Számítógép", "PC") FROM címek WHERE type = "Személyi_számítógép" SELECT CONVERT ("PostgreSQL" HASZNÁLATA iso_8859_1_to_utf_8) "PostgreSQL"
SQL szerver
Az SQL Server nem támogatja a TRANSLATE funkciót. Az SQL Server CONVERT funkciójának megvalósítása nem felel meg az SQL 2003 szabványnak, ez a funkció az SQL Serverben egyenértékű a CAST funkcióval.
KONVERT (adattípus [(hossz) | (pontosság, lépték)], kifejezés, stílus])
A stíluszáradék a dátumkonverzió formátumának meghatározására szolgál. További információkért tekintse meg az SQL Server dokumentációját. Alább egy példa.
Cím KIVÁLASZTÁSA, KONVERTÁLÁS (char (7), ytd_sales) címekből ORDER BY cím GO
Ma azt javaslom, hogy fontolja meg az egyszerű használati példákat Transact-SQL karakterlánc-függvények, és nem csak néhány függvény leírása és példák, hanem azok kombinációja, pl. hogyan lehet őket egymásba ágyazni, hiszen sok feladat megvalósításához nem elegendőek a szabványos funkciók, és ezeket együtt kell használni. Ezért szeretnék néhány egyszerű példát mutatni az ilyen lekérdezések írására.
Az SQL karakterlánc-függvényeket már vizsgáltuk, de mivel ennek a nyelvnek a megvalósítása különböző DBMS-ekben eltérő, így például egyes függvények nem a Transact-SQL-ben vannak, de a PL / PGSql-ben igen, és legutóbb a string függvényeket néztük meg. amely használható a plpgsql-ben, ezért ma kifejezetten a Transact-SQL-ről fogunk beszélni.
Hogyan kombinálható a SUBSTRING, CHARINDEX és LEN
És így például egy sztringben egy részt kell keresni egy bizonyos kritérium szerint, és ki kell vágni, és nem csak egy azonos típusú részt kell keresni, hanem dinamikusan, pl. a keresési karakterlánc minden sornál eltérő lesz. A példákat a Management Studio SQL Server 2008-ban írjuk le.
Ehhez a következő függvényeket fogjuk használni:
- SUBSTRING(str, start, len) - ez a függvény kivágja a karakterlánc egy részét egy másik karakterláncból. Három paramétere van 1. Ez maga a karakterlánc; 2. A kiindulási helyzet, ahonnan el kell kezdeni a vágást; 3. A karakterek száma, hány darabot kell kivágni.
- CHARINDEX(str1, str2) - megkeresi az str1-et az str2-ben, és visszaadja az első karakter sorszámát, ha ilyen karakterlánc található. Van egy harmadik opcionális paramétere, amellyel megadható, hogy melyik oldalról indítsa el a keresést.
- LEN(str1) a karakterlánc hossza, azaz. Karakterek.
Mint látható, itt a változók deklarációját használtam, és a változók helyett saját mezőket helyettesíthet a kérésben. Íme maga a kód:
A @rezult deklarálása varchar-ként (10) - kezdeti karakterlánc deklarálja az @ str1-et varchar-ként (100) - keresési karakterlánc deklarálja az @ str2-t varchar-ként (10) set @ str1 = "Tesztelje a karakterláncot egy másik karakterlánc kereséséhez" set @ str2 = "string" beállítása @ rezult = substring (@ str1, CHARINDEX (@ str2, @ str1), LEN (@ str2)) válassza a @rezult
A lényeg itt a következő: a len függvény segítségével megtudjuk, hány karaktert kell kivágni, a charindex pedig beállítja azt a pozíciót, ahonnan indul a vágás, és ennek megfelelően a substring elvégzi a kijelölést a karakterláncban.
Hogyan kombinálható a LEFT, RIGHT és LEN
Tegyük fel, hogy be kell szereznie egy karakterlánc első néhány karakterét, vagy ellenőriznie kell a karakterlánc első karaktereit, hogy van-e valami, például valamilyen szám, és ennek hossza természetesen eltérő (persze tesztpélda) .
- Bal(str, kol) - a függvény kivágja a megadott számú karaktert balról, két paramétere van, az első egy karakterlánc, a második pedig a karakterek száma;
- Jobb(str, kol) - a függvény jobbról kivágja a megadott számú karaktert, a paraméterek megegyeznek.
Most egyszerű lekérdezéseket fogunk használni a táblázathoz
Először hozzunk létre egy teszt_táblát:
TÁBLÁZAT LÉTREHOZÁSA (AZONOSÍTÓ (1,1) NEM NULL, (18, 0) NULL, (50) NULL, KORSZÍTÁS ELSŐDLEGES KULCS CLUSTERED (ASC) A(z) (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEYALLONS =ROWONCPOWONS) ) INDULÁSTöltsük fel tesztadatokkal, és írjuk be a következő lekérdezéseket:
Amint érti, az első lekérdezés csak az összes sor kijelölése (SQL alapjai - select utasítás), a második pedig a funkcióink közvetlen kombinációja, itt van a kód:
Válassza ki a *-ot a teszt_táblából, válassza ki a számot, balra (szöveg, LEN (szám)) str-ként a teszt_táblázatból
És ha ezek a számok a jobb oldalon lennének, akkor a függvényt használnánk JOBB.
Az Rtrim, Ltrim, Upper és Lower kombináció használata
Feltéve, hogy van egy sor szóközzel az elején és a végén, és természetesen megszabadulna tőlük, és például elkészítené őket úgy, hogy ebben a sorban az első betű nagybetűssé váljon.
- Rtrim(str) - eltávolítja a szóközöket jobbról;
- Ltrim(str) - eltávolítja a szóközöket a bal oldalról;
- Felső(str) - a karakterláncot nagybetűvé alakítja;
- Alsó(str) - a karakterláncot kisbetűvé alakítja.
Mint látható, a javításhoz itt is használtunk Alkarakterláncés Len... A lekérdezés jelentése egyszerű, jobbról és balról is eltávolítjuk a szóközöket, majd az első karaktert kivágással nagybetűvé alakítjuk, majd ezt a karaktert összefűzzük (operátor +) a karakterlánc többi részével. Íme a kód:
@ str1 deklarálása mint varchar (100) beállítva @ str1 = "teszt karakterlánc kezdő és záró szóközökkel" kijelölés @ str1 kijelölés felső (substring (rtrim (ltrim (@ str1)), 1,1)) + alsó (substring ( rtrim () ltrim (@ str1)), 2, LEN (rtrim (ltrim (@ str1))) - 1))
Mára szerintem ennyi elég is, és ha szeretsz SQL-ben programozni, akkor ezen az oldalon már nem egyszer érintettük például ezt a nagyon érdekes témát.