Adattípusok Numerikus adatok A numerikus adatok különböző típusú számértékek. Logikai érték A logikai adattípus értéke igaz, vagy hamis lehet. Tárolására egy byte-ot tartanak fenn. A logikai értékekkel logikai műveleteket lehet végrehajtani. Karakter A karaktereket kódolt formában tárolják, a személyi számítógépeken általában ASCII kódban. Egy karaktert egy byte-on ábrázolnak. A karakteres adatokon a leggyakrabban végzett művelet a láncolás és a szövegrész kiemelése. Dátum A dátum típusú adatokkal speciális műveleteket lehet végezni, például két dátum különbsége a két időpont között eltelt napok száma. Egy dátum 8 byte-ot foglal le. A matematikai műveleteket dátumok esetén is használhatjuk, néhány megszorítással. Egy szám típusú kifejezés dátumoz hozzáadása vagy kivonása csak a dátum értékének előzetes szám típusúvá alakításával lehetséges. Konstansok A karakteres konstans egy karaktersorozat, amely idézőjelek (" vagy ') közé van téve. Két, egymásnak megfelelő határoló jel között használható a másik határoló is. Az üres karakterlánc egy 0 hosszúságú lánc, jelölése: "" . A numerikus konstansok pozitív, vagy negatív egész számok. Ezeket nem kell határolókkal ellátni. A logikai konstansok az igaz - jelölése. T. - és a hamis - jelölése. F. - értékek. Kifejezések A kifejezés egy számítás jelölése. Előírja valamely érték kiszámításának módját. A kifejezés műveletekből és operandusokból áll. A kifejezések lehetnek numerikus, logikai vagy karakterlánc típusúak. Operandusok: konstansok, változók, függvényhívások. A kifejezések kiértékelése a matematikai szabályoknak megfelelően a precedencia figyelembe vételével történik. Először a zárójelekben található kifejezések értékelődnek ki (belülről kifelé). Ezen belül előbb mindig a nagyobb prioritású művelet hajtódik végre. Azonos prioritású műveletek esetén a kifejezés kiértékelése balról jobbra történik. Precedencia (kiértékelési sorrend): 1. Zárójelben lévő műveletek (balról jobbra) 2. Hatványozás 3. Szorzás és osztás (balról jobbra) 4. Összeadás és kivonás (balról jobbra)
Matematikai (numerikus) műveletek + összeadás kivonás * szorzás / osztás ** % () Relációs műveletek < > = < > , != , # <= >= == $ ()
hatványozás maradék (modulus) képzés a műveletek csoportosítása
kisebb, mint nagyobb, mint egyenlő nem egyenlő kisebb, vagy egyenlő nagyobb, vagy egyenlő pontosan azonos karakter előfordulása szövegben A műveletek sorrendjének megváltoztatása
Az azonosság a karakter típusú kifejezéseket azonos karakterekre és azonos hosszúságra vizsgálja meg, ha a kifejezés numerikus, akkor az összehasonlításnál csak a 12 legnagyobb helyiértékű jegyet vizsgálja meg. A $ művelet értelmezése: n $ m értéke IGAZ, ha az n változóban levő karaktersorozat megtalálható az m változóban levő karaktersorozatban. Példák: "alma " = "alma" "alma " == "alma" x=123456789012.54321 y=123456789012.32102 x=y x == y
igaz hamis
hamis igaz
"DR." $ UPPER(TSZEM->NEV) kifejezés értéke igaz, ha a TSZEM adatbázis NEV nevű változójában levő karaktersorozatban szerepel a DR. karaktersorozat. A vizsgálat előtt a NEV mező betűit nagybetűssé alakítja az UPPER() függvény.
Logikai műveletek .AND. ÉS művelet .OR. VAGY művelet .NOT. TAGADÁS (negálás) ! TAGADÁS (negálás) ()
IGAZ értéket ad vissza, ha mindkét kifejezés IGAZ az egyik kifejezés IGAZ valamelyik kifejezés hamis
a műveletek sorrendjének megváltoztatása
Karakteres műveletek + két, vagy több karaktersorozat összeláncolása két, vagy több karaktersorozat összeláncolása úgy, hogy a - jel előtti karaktersorozat végéről a szóközök a - jel utáni karaktersorozat végére kerülnek.
Matematikai (numerikus) függvények ABS(
) numkif numerikus kifejezés Az ABS függvény a numerikus kifejezés abszolút értékét képzi. INT() numkif numerikus kifejezés Az INT függvény a numerikus kifejezés egész részét képzi. LOG() numkif numerikus kifejezés A LOG függvény a numerikus kifejezés természetes logaritmusát képzi. MAX(,) numkif1 numerikus kifejezés numkif2 numerikus kifejezés A MAX függvény két numerikus kifejezés közül a nagyobbik értékét adja vissza. MIN(,) numkif1 numerikus kifejezés numkif2 numerikus kifejezés A MIN függvény két numerikus kifejezés közül a kisebbik értékét adja vissza. ROUND(<expN1>, <expN2>) expN1 a kerekítendő numerikus kifejezés. expN2 a kerekítés után a tizedesjegyek száma. A ROUND() az <expN1> számot az <expN2>-nek megfelelő számú tizedesjegyre kerekíti. Az <expN2> értékének 0, vagy negatív számként megadása esetén a kerekítés egész számra történik. Ha az <expN2> negatív, ez megadja a tizedesponttól balra lévő azon helyeknek a számát, amelyre a kerekítés vonatkozik. SQRT() numkif numerikus kifejezés Az SQRT függvény a numerikus kifejezés négyzetgyökét számítja ki.
Karakterműveleteket végző függvények ALLTRIM(<strkif>) strkif karakteres kifejezés A függvény eltávolítja a karakteres kifejezés vezető és követő szóközeit. AT (<expC1> , <expC2>) Megkeresi a megadott részkarakterlánc <expC1> egy másik karakterláncon <expC2> belüli első elôfordulási helyét, és a kezdôpont egész típusú numerikus értékével tér vissza. <expC1> a keresendô karakterlánc (substring) <expC2> az a karakterlánc, amelyben a keresést el kívánjuk végezni. Ha a keresendő karakterláncot a kijelölt karakterlánc nem tartalmazza, az AT() 0 értékkel tér vissza. LEN(<strkif>) strkif karakteres kifejezés Ez a függvény a karakteres kifejezés hosszát adja meg, vagyis megszámolja hány darab karakterből áll a kifejezés és ezt a számot adja vissza eredményként. LEFT(<strkif>,) strkif karakteres kifejezés numkif hossz A függvény a karakteres kifejezés a hosszban megadott számú baloldali karakterét adja eredményül. A hosszba a szóközök is beleszámítanak. LOWER(<expC>) Átalakítja a megadott karaktelánc nagybetűit kisbetűkké. Paraméter: <expC> az átalakítandó karakterlánc. A paraméterben meghatározott karakterlánc nagybetűit kisbetűkre alakítja át. LTRIM(<strkif>) strkif karakteres kifejezés A függvény levágja a karakteres kifejezés vezető szóközeit.
RAT(<expC1>, <expC2>) Megkeresi az adott részkarakterlánc <expC2> utolsó előfordulását az adott karakterláncon <expC1> belül, és megadja annak kezdő pozícióját egész típusú numerikus értékként. Ha a keresett részkarakterlánc a vizsgáltban nem található meg, a RAT() 0-t ad vissza. RIGHT(<strkif>,) strkif karakteres kifejezés numkif hossz A függvény a karakteres kifejezés a hosszban megadott számú jobbboldali karakterét adja eredményül.
RTRIM(<strkif>) strkif karakteres kifejezés A függvény levágja a karakteres kifejezés követő szóközeit. SPACE() numkif numerikus kifejezés A függvény a numerikus kifejezésben megadott számú szóközt állít elő. STRTRAN(<expC1>, <expC2> [,<expC3>] [,<expN1>] [,<expN2>]) Karakterlánc (szöveg) keresése és helyettesítése adott karakterláncon belül. <expC1> az a karakterlánc, amelyben a keresést végre kívánjuk hajtani <expC2> a keresendő karakter-sorozat <expC3> az a karakter-sorozat, amellyel a keresettet helyettesíteni kívánjuk. Ha ezt a paramétert nem adjuk meg, a talált karaktersorozat null-karakterlánccal helyettesítődik, azaz kivágásra kerül. <expN1> az első olyan előfordulás sorszáma, ahol cserélni szeretnénk. Ha ezt nem adjuk meg, alapértelmezésben értéke 1. <expN2> a kicserélendő elemek száma. Ha ezt nem adjuk meg, alapértelmezés szerin az összes talált elem helyettesítésre kerül. STUFF(<expC1>, <expN1>, <expN2>, <expC2>) Egy karakterlánc karaktereinek helyettesítése, és az új karakterlánc visszaadása. <expC1> a cél-karakterlánc. <expN1> a cél-karakterlánc azon pozíciója, amelytől a helyettesítést kezdjük. <expN2> a helyettesítendő karakterek száma a cél-karakterláncban. <expC2> a helyettesítő karakterlánc. Az <expN2>-nek megfelelő számú karaktert helyettesíti az <expC1> karakterláncban az <expN1>-nek megfelelő helytől kezdve, <expC2) karakterlánccal helyettesítve a megadott karaktereket. A következő hat műveletet végezhetjük el: Beszúrás: Ha az <expN2> értékeként 0-t adunk meg, karakterek nem kerülnek eltávolításra az <expC1>-ből, és az <expC2> karakterlánc az <expN1>-től kezdődően beszúrásra kerül, és a visszaadott érték a teljes karakterláncot tartalmazza. Helyettesítés: Ha helyettesítő karakterláncot (<expC2>) adunk meg, (az <expN2>-nek megfelelő hosszúságút), az <expC2> az <expN1>-től kezdődően behelyettesítésre kerül. Törlés: Ha a helyettesítő karakterlánc (<expC2>) egy null-(üres)-karakterlánc (""), az <expN2>-nek megfelelő számú karakter az <expC1>-ből kivágásra kerül, bármilyen karakter beszúrása nélkül.
Helyettesítés és beszúrás: Ha a helyettesítő karakterlánc (<expC2>) hosszabb, mint az <expN2>-nek megfelelő érték, az <expN1>-től kezdődően az összes karakter cserére kerül, és a helyettesítő karakterlánc (<expC2>) beszúrásra kerül. Helyettesítés és törlés: Ha a helyettesítő karakterlánc (<expC2>) hossza kisebb, mint az <expN2>-vel megadott érték, a cél-karakterlánc (<expC1>) az <expC2> végétől kezdődően törlésre kerül az <expN2> által megadott pozícióig. Helyettesítés és a maradék törlése: Ha az <expN2> nagyobb, mint a cél-karakterlánc (<expC1>) hossza, a helyettesítő karakterlánc (<expC2>) az <expN1>-től kezdődően helyettesítésre kerül, és az <expC1> maradék része törlésre kerül. SUBSTR(<strkif>,,) strkif karakteres kifejezés numkif1 kezdő pozíció numkif2 a karakterek száma Ez a függvény egy karakterláncból egy részkarakterláncot képez. A numkif1 adja meg, hogy a részlánc az eredeti karakterlánc hányadik karakterétől kezdődik, a numkif2 pedig, hogy hány karakterből fog állni. Ha a numkif2-t nem adjuk meg, akkor a részkarakterláncot a megadott pozíciótól a karakterlánc végéig képzi a függvény. Ez történik akkor is, ha numkif2 értéke nagyobb, mint a kezdő pozíciótól hátralevő karakterek száma. Ha a kezdő pozíció nagyobb, mint a kiinduló karakterlánc hossza, akkor az eredmény egy üres karakterlánc lesz. UPPER(<expC>) Átalakítja a kisbetűket nagybetűs megfelelőjükre az adott karakterláncban. Paraméter: <expC> az átalakítandó karakterlánc. Az UPPER() az összes kisbetűt nagy megfelelőjére alakítja az <expC> karakterláncban, a többi karaktert pedig érintetlenül hagyja.
Konverziós függvények A konverziós függvényekkel az adatokat egyik típusról egy másikra alakíthatjuk át. CTOD(<strkif>) strkif karakteres kifejezés Ez a függvény egy karakteres kifejezést dátummá alakít át. A karakteres kifejezésnek a megfelelő dátum formátumban kell lennie és érvényes dátumot kell tartalmaznia. A dátum formája alapértelmezés szerint: hónap/nap/év , az év az évszázadot nem tartalmazza. DTOC() datkif dátum kifejezés Ez a függvény egy dátum típusú adatot karakterlánccá alakít. így már karakteres műveleteket tudunk végezni a dátummal, például összeláncolhatjuk egy szöveggel. STR([,[,]]) numkif1 numerikus kifejezés numkif2 hossz numkif3 tizedes jegyek száma A függvény egy numerikus kifejezést karakterlánccá alakít át. A hossz paraméter azt adja meg, hogy a karakterlánc hány karakter hosszú legyen, ebbe a tizedespontot is bele kell számítani. Ha a szám ennél rövidebb, akkor szóközök fogják megelőzni. Ha a hosszra és a tizedes jegyekre nem adunk meg értéket, akkor 10 karakter hosszúságú lesz az eredmény. Ha a numerikus kifejezésben több tizedes jegy van a megadottnál, akkor kerekít a függvény az átalakításkor, ha pedig a szám túl nagy és nem fér el a megadott hosszon, akkor az eredmény a megadott hosszúságú * sorozat lesz. VAL(<strkif>) strkif karakteres kifejezés A függvény egy karaktersorozatot számmá alakít át. A karaktersorozatot addig értelmezi, amíg számnak tekinthető. A vezető szóközöket figyelmen kívül hagyja.
Dátum és időkezelő függvények DATE() A függvény a rendszerdátumot adja meg, eredménye dátum típusú. Alapértelmezés szerint a dátum hónap/nap/év alakú, de a SET DATE ANSI utasítással a megszokottabb év.hó.nap alakra változtatható. Alapértelmezés szerint az évszázad nem jelenik meg. TIME() A függvény a rendszeridőt adja meg óó:pp:ss formában. Az eredmény típusa karakteres. MONTH(<expD>) Dátum érték numerikus értékké alakítása, mely a dátumnak megfelelő hónapnak a számát adja meg. <expD> az átalakítandó dátum. Egy 0-tól 12-ig terjedő egész számot ad vissza. Null dátum megadása 0 érték visszaadását eredményezi. YEAR(<expD>) Dátumérték átalakítása évszámmá. Paraméter: <expD> az átalakítandó dátum-érték. A megadott dátumnak megfelelő évszám egész típusú numerikus értékét adja vissza.
Egyéb függvények EMPTY() kif karakteres kifejezés numerikus kifejezés dátumkifejezés logikai kifejezés A függvény egy adott kifejezésről eldönti, hogy üres-e. A függvény eredménye a kifejezés típusától függően logikai igaz (.T.), ha - egy karakteres változó üres (hossza=0), vagy ha csak szóközöket tartalmaz - egy numerikus kifejezés értéke 0 - egy dátumkifejezés üres dátumot tartalmaz - egy logikai kifejezés értéke hamis (.F.) IF(<expL>, <exp1>, <exp2>) IIF(<expL>, <exp1>, <exp2>) Két megadott kifejezés valamelyikének eredményével tér vissza egy logikai kifejezés értékétől függően. Paraméterek: <expL> a kiértékelendő logikai kifejezés. <exp1> a logikai kifejezés 'igaz' (.T.) értéke esetén visszaadandó értékű kifejezés <exp2> a logikai kifejezés 'hamis' (.F.) értéke esetén visszaadandó értékű kifejezés. Az <exp1> és az <exp2> különböző adattípusúak is lehetnek. Az IF() visszaadja a logikai kifejezés értékétől függően valamelyik megadott paraméter értékét.