C# - Sztringkezelés a Transact SQL-ben

Transact SQL 4. rész

forráskód letöltése
Cikksorozatunk mostani részében a Transact SQL sztringkezelő függvényeit vesszük szemügyre.
01.sql: ASCII, Char
Az ASCII függvénynek átadva egy char, vagy varchar típusú adatot, visszakapjuk a szöveg első karakterének ASCII kódját. A visszatérési érték integer lesz.
A Char függvénynek átadva egy 0 és 255 közötti számot, visszakapjuk a hozzá tartozó karaktert. A visszatérési érték char(1) lesz.
select ascii('A') as 'A', ascii('B') as 'B', char(65) as '65', char(66) as '66'
02.sql: CharIndex
Egy szövegben megkereshetjük egy adott sztring előfordulását.
Első paraméterként a keresendő szöveget kell megadnunk. A másodikba jön az, hogy hol kell keresni ezt a szót. A harmadik paraméter nem kötelező, ha használjuk, akkor itt adhatjuk meg azt, hogy hányadik karaktertől kezdődjön a keresés a második paraméterben megadott szövegben. Így lehetőségünk van nem csak a keresett szó első előfordulását megtalálni.
Visszatérési érték: integer. Ha értéke nulla, akkor nincs találat.
Az alábbi példában a Categories tábla azon sorait gyűjtjük ki, amelyeknél a description mezőben megtalálható az AND szó.
select charindex('and', description) as charindex, convert(varchar(80), description) as description
from categories
where charindex('and', description)>0
03.sql: Soundex
Igen érdekes lehetőséget biztosít számunkra a Soundex függvény. Ha szükségünk van arra, hogy hasonló szövegeket keressünk elő adataink közül, akkor ehhez az első lépés a Soundex használata lehet. Ez a függvény egy kódot generál a szöveg alapján, mely egy betűből és három számból áll. A betű egyezik a szövegünk első karakterével. A szám a további betűkre jellemző értéket takar. Annak eldöntésére, hogy két vagy több szöveg egymáshoz hasonlónak tekinthető-e vagy sem, az a visszaadott kódok értéke alapján határozható meg. Ha két szöveghez azonos kód kerül kiosztásra, akkor ez a két szöveg hasonlónak tekinthető.
Visszatérési érték: char
Alábbi példában megszámláljuk, hogy hány azonos kódot kap a Customers tábla ContactName oszlopának adata.
select soundex(ContactName), count(*)
from customers
group by soundex(ContactName)
04.sql: Soundex
Előző példánál az eredmény halmazban láthattuk, hogy két esetben fordul elő olyan adat, hogy van hozzá hasonló adat. Vagyis az a két szöveg, melyhez az A500, illetve az A425 lett rendelve, hasonlóak egymáshoz.
Nézzük most e két párosból az A500-hoz tartozó két szöveget:
select ContactName
from customers
where soundex(ContactName) = 'A500'
05.sql: Soundex, Difference
A „Szilva” és a „Szilvásgombóc” szövegre kérve egy Soundex azonosítót az S241-et kapjuk mindkét esetben. Mivel ezek egyenlők, így tudhatjuk, hogy a két szöveg is hasonló egymáshoz.
Van egy másik függvény, mely segít bennünket a hasonló szövegek megtalálásában. Ez a Difference függvény, melynek két szöveget kell megadnunk paraméterként hasonlóság vizsgálat céljából. A visszatérési érték egy szám lesz nulla és négy között. Ez a szám úgy jön létre, hogy a két szövegre a Soundex által visszaadott négy karakteres adatot összehasonlítva hány egyező karakter van. Nulla egyező karakter esetén biztosak lehetünk, hogy a két szöveg nem hasonlít egymásra. Négy esetén pedig a két Soundex érték teljesen egyező, így a két szöveg is hasonló egymáshoz.
A Difference által visszaadott érték tehát minél nagyobb, annál nagyobb a hasonlóság is a két szöveg között, vagyis a két Soundex érték annál jobban megegyezik egymással.
SELECT SOUNDEX('Szilvafa'), SOUNDEX('Szilvásgombóc'), DIFFERENCE('Szilvafa', 'Szilvásgombóc')
06.sql: Left, Right
A Left függvény egy szöveges adatból megadott számban ad vissza karaktereket a szöveg bal oldaláról. A Right függvény ugyanezt teszi, csak a jobb oldalról indulva.
Mindkét esetben az első paraméter a szöveges adat, a második a másolandó karakterek száma.
Visszatérési érték: varchar
select companyname, left(companyname, 3), right(companyname, 3)        
from customers
07.sql: LTrim, RTrim
Szóközök levágására alkalmas az LTrim és az RTrim függvény. Az LTrim a szöveg bal oldalán lévő szóközöket, míg az RTrim a jobb oldalon lévő szóközöket távolítja el.
Visszatérési érték: varchar
declare @str varchar(26)
set @str = '     Animare Software     '
select ltrim(@str), rtrim(@str)
Ha egy szöveg mindkét oldalán lévő szóközöket el szeretnénk távolítani, akkor használjuk a két függvényt egymásba ágyazva:
declare @str varchar(26)
set @str = '     Animare Software     '
select ltrim(rtrim(@str))
08.sql: Lower, Upper
A Lower függvénnyel egy szöveget kisbetűssé, míg az Upper függvénnyel nagybetűssé alakíthatjuk.
Visszatérési érték: varchar
select companyname, lower(companyname), upper(companyname)        
from customers
09.sql: Len
Egy szövegben lévő karakterek számát a Len függvény adja vissza.
Visszatérési érték: int
select companyname, len(companyname)        
from customers
10.sql: NChar, Unicode
A 10.sql tartalmát célszerű a Query Analizer-ben futtatni, mivel a Delphi nem jeleníti meg az Unicode karaktereket.
A NChar függvény a paraméterként megadott számhoz tartozó Unicode karaktert adja vissza. Visszatérési érték: nchar(1).
Az Unicode függvény ennek ellentéte: a paraméterként megadott Unicode típusú szöveg első karakterének kódját adja vissza. Visszatérési érték: int.
use master
declare @str nchar
select @str=name from syslanguages where langid=28
select unicode(@str), nchar(32321)
11.sql: PatIndex
A PatIndex használatával lehetőségünk van egy szövegben egy másik szöveg keresésére. Az első paraméterben a keresendő szöveget kell megadnunk % jelek között. A % jelet használhatjuk a keresendő szöveg betűi között is. Egy % jel tetszőleges számú egyéb karakterrel ér fel az összehasonlítás elvégzésekor. A második paraméterben pedig azt a szöveget kell megadnunk, melyben keresni szeretnénk.
Visszatérési érték: int. Ez a szám adja meg, hogy a keresett szöveg hányadik karaktertől fordul elő. Ha értéke nulla, akkor nincs találat.
Alábbi lekérdezéssel leválogatjuk a customers tábla azon sorait, melyeknél a country mező adataiban megtalálható az EN szó, amely után valahol a szövegben még egy A betű is található. Például: Argentina
select country, PATINDEX('%en%a%', country)
from customers
where PATINDEX('%en%a%', country)>0
12.sql: Replace
Egy szövegben cserélhetünk is egy tetszőleges részt egy tetszőleges másikra a Replace függvény használatával. Első paraméterként azt a szöveget kell megadnunk, melyben a cserét végezzük. Másodikként a cserélendő szöveg adható meg, míg harmadikként az, hogy mire cseréljük a megtalált szövegrészt.
Alábbi lekérdezéssel a Country mezőben az összes E és A betűt lecseréljük egy – karakterre.
select country, replace(replace(country, 'e', '-'), 'a', '-')
from customers
13. sql: QuoteName
Elválasztó karakterek beszúrásához használhatjuk a QuoteName függvényt. Első paraméterben egy szöveget kell megadnunk, melyet több részre szeretnénk tagolni. A másodikban az elválasztó karakter adható meg, mely lehet „ ’ vagy [].
Visszatérési érték: nvarchar(129)
SELECT QUOTENAME('12"345"6789', '"')
14. sql: Replicate, Space
A Replicate függvény egy tetszőleges karaktert ismétel meg egy általunk megadott darabszámig, majd ezt egy sztringként adja vissza. Első paraméterben az ismétlendő karaktert, másodikban a darabszámot kell megadnunk.
Ehhez hasonló működésű a Space függvény, de ez mindig szóköz karaktert ismétel, így paraméterként csak az ismétlési darabszámot kell megadni.
select 'a' + replicate('_', 12) + 'b', 'a' + space(12) + 'b'
15.sql: Str
Számot szöveggé alakítani az Str függvénnyel tudunk. Ennél első paraméterként a konvertálandó számot kell megadni, másodikként azt, hogy hány karakter hosszú legyen a konvertált szöveg, végül harmadikként azt, hogy hány tizedes jegy legyen figyelembe véve a konvertálandó számnál.
Visszatérési érték: char
select str(123.456, 5, 2)
16.sql: Stuff
Egy szövegből néhány karaktert kitörölni, majd egy új részt behelyettesíteni a Stuff nevű függvénnyel lehet. Első paraméterként azt a szöveget kell megadnunk, melyből törölnénk, illetve behelyettesítenénk. Második paraméterként a törlendő szöveg kezdőpozícióját adhatjuk meg, míg harmadikként a törlendő karakterek számát. Negyedik paraméterben a kitörölt szövegrész helyére kerülő sztringet adjuk meg.
SELECT STUFF('Bariton', 3, 2, 'la')
17.sql: SubString
Egy szövegből egy részt kimásolhatunk a SubString függvény használatával. Első paraméterként a feldolgozandó szöveget kell megadnunk. Másodikként a másolás kezdeti pozícióját, míg harmadikként a másolandó karakterek számát adhatjuk meg.
Alábbi lekérdezés segítségével úgy válogatjuk le a telefonszámokat a Customers táblából, hogy töröljük azok körzetszámra vonatkozó információit.
select phone, ltrim(substring(phone, charindex(' ', phone), len(phone)))
from customers

Transact SQL cikksorozat

Transact SQL Referencia - Transact SQL 1. rész
Transact SQL további belső változói - Transact SQL 2. rész
Dátumkezelés a Transact SQL-ben - Transact SQL 3. rész

Sztringkezelés a Transact SQL-ben - Transact SQL 4. rész

Folyamatvezérlés eszközei a Transact SQL-ben - Transact SQL 5. rész
Összesítő függvények - Transact SQL 6. rész
Adatbázisok létrehozása, törlése - Transact SQL 7. rész
Adatbázis módosítás lehetőségei - Transact SQL 8. rész
Táblák létrehozása - Transact SQL 9. rész
Táblák módosítása, törlése - Transact SQL 10. rész
Rendszer funkciók - Transact SQL 11. rész
Adatkonvertálási lehetőségek - Transact SQL 12. rész
Tárolt eljárás létrehozása - TransactSQL 13. rész
Triggerek kezelése - Transact SQL 14. rész
Indexek létrehozása - Transact SQL 15. rész
Függvények definiálása - Transact SQL 16. rész
Függvények felüldefiniálása és törlése - Transact SQL 17. rész
Szabályok létrehozása - Transact SQL 18. rész
Alapértelmezett értékek megadása - Transact SQL 19. rész
Nézet táblák létrehozása - Transact SQL 20. rész
Nézettáblák módosítása - Transact SQL 21. rész
Adatbázis és tranzakciós napló mentése - Transact SQL 22. rész
Elmentett adatbázis és tranzakciós napló visszaállítása - Transact SQL 23. rész
Full-Text Catalog létrehozása, használata - Transact SQL 24. rész
Full-Text Catalog további lehetőségei - Transact SQL 25. rész
Tranzakció-kezelés az MS SQL-ben - Transact SQL 26. rész
Tranzakció-kezelés az MS SQL-ben - Transact SQL 27. rész
SET parancsok - Transact SQL 28. rész