Sie sind auf Seite 1von 3

Skalare Funktionen Stringfunktionen

Alle Funktionen dieses Typs beziehen sich grundsätzlich nur auf eine concat(s1, s2) s1 und s2 konkateniert (entspricht s1||s2)
Datenzeile!
lower(s) s in Kleinbuchstaben
Beispiel
Alle Kundennamen in Großschrift: upper(s) s in Großbuchstaben
select kunden_nr, upper(name1 || ' ' || name2) name from kunde; initcap(s) erstes Zeichen eines Wortes groß, Rest klein
s1 auf n Zeichen mit s2 von links aufgefüllt (Defaultwert
lpad(s1, n [,s2])
Kunden_Nr Name1 Name2 Kunden_Nr Name für s2 ist ein Blank)
1 Meier GmbH 1 MEIER GMBH s1 auf n Zeichen mit s2 von rechts aufgefüllt (Defaultwert
rpad(s1, n [,s2])
für s2 ist ein Blank)
2 TAKTUM Informatik => TAKTUM INFORMATIK
alle führenden Zeichen aus s2 in s1 entfernen
3 Müller AG MÜLLER AG ltrim(s1[,s2])
(Defaultwert für s2 ist ein Blank)
Schulze & alle endenden Zeichen aus s2 in s1 entfernen
4 SCHULZE & SÖHNE rtrim(s1[,s2])
Söhne (Defaultwert für s2 ist ein Blank)
trim(s1) Kombination aus ltrim und rtrim (ab 8i)
Numerische Funktionen replace(s1,s2[,s3]) suche s2 in s1 und ersetze ihn durch s3 bzw. NULL
abs(a) absoluter Wert von a in s1 werden alle Zeichen aus s2 durch solche aus s3
kleinste ganze Zahl größer als a translate(s1,s2,s3)
ceil(a) ersetzt
floor(a) größte ganze Zahl kleiner als a Teilstring von s ab Stelle m, n Zeichen lang (n nicht
substr(s,m[,n])
mod(m,n) m Modulo n (Rest von m geteilt durch n) angegeben => bis Stringende)
power(m,n) m hoch n suche s2 in s1 und zwar ab der n-ten Stelle das m-te
round(n[,m]) n auf m Stellen gerundet instr(s1, s2[,n[,m]]) Auftreten (Defaultwerte für n und m sind 1), Ergebnis ist
die gefundene Position in s1 oder 0
sign(a) Vorzeichen von a (0, 1 oder -1)
length(s) die Länge von s
sin(a) Sinus von a (weitere trigonometrische Funktionen verfügbar)
Beispiele
sqrt(a) Wurzel aus a Teilstring bestimmen
trunc(a[,m]) a auf m Stellen abgeschnitten substr('TAKTUM Informatik', 1, 6)
exp(n) liefert e hoch n (e=2,17828...) Ergebnis: 'TAKTUM'
Suchen
ln(n) natürlicher Algorithmus von zu e
instr('TAKTUM Informatik', 'Info')
log(m,n) Logarithmus von n zu Basis m Ergebnis: 8
Beispiele Zeichen erzeugen
select round (21.76) from dual; chr(65)
Ergebnis: 22 Ergebnis: 'A'
select trunc (21.76) from dual; Auf diese Weise können auch nicht druckbare Sonderzeichen in einen String
Ergebnis: 21 eingefügt werden. Allerdings muss dann der Zeichensatz der Datenbank
select trunc (21.76, -1) from dual; bekannt sein.
Ergebnis: 20 Zeichenkodierung erzeugen
Der zweite Parameter bei "round" und "trunc" gibt die Position der Stelle an, an ascii('A')
der gerundet bzw. abgeschnitten werden soll. Positive Zahlen bedeuten Stellen Ergebnis: 65
nach dem Komma, negative vor dem Komma. Gibt man den Wert nicht an greift Teilstring ersezten
der Defaultwert "0", der ganzzahlig rundet bzw. abschneidet.
replace('SCHADE', 'D', 'LK') Sonstige Funktionen
Ergebnis: 'SCHALKE' decode "if then else"
Zeichen austauschen
greatest(e1[,e2] ...) größter Wert der Ausdrücke
translate('ABC67LR5', '0123456789','**********')
Ergebnis: 'ABC**LR*' least(e1[,e2] ...) kleinster Wert der Ausdrücke
translate('ABC67LR5', '*0123456789','*') nvl(e1, e2) ist e1 NULL dann e2 sonst e1
Ergebnis: 'ABCLR' nvl2(e1, e2, e3) ist e1 NULL dann e3 sonst e2 (ab 8i)
Auf diese Weise lassen sich unerwünschte Zeichen elegant aus einer
user aktueller Datenbankbenutzername
Zeichenkette entfernen.
userenv(s) Informationen zur Benutzerumgebung
Datum-Funktionen dump(e) interne Kodierung von e
add_months(d,n) Datum d plus n Monate vsize(e) benötigter Speicherplatz in Bytes
Datum des letzten Tages des Monats, in dem d Beispiele
last_day(d)
enthalten ist decode (status,'A','Angelegt','E','Erledigt','S','Storniert','Unbekannt')
months_between(d1, Je Nach Status werden unterschiedliche Zeichenketten zurück geliefert. Z.b. Bei
Anzahl der Monate zwischen d1 und d2 'E' 'Erledigt'. Ist der Status nicht 'A', 'E' oder 'S' liefert "decode" 'Unbekannt'.
d2)
Mit "decode" lassen sich Berechnungen durchführen, die sonst nur mittels
Datum d gerundet je nach Format (Defaultwert für fmt
round(d[,fmt]) Programmierung realisierbar wären. Typische Anwendungen sind
ist 'dd' (Tag))
Kategorisierungen.
sysdate aktuelles Datum und Uhrzeit nvl(artikel_nr, 999999)
Datum d abgeschnitten je nach Format (Defaultwert Ergebnis: 999999 wenn die Artikelnummer nicht gefüllt ist sonst die
trunc(d[,fmt])
für fmt ist 'dd' (Tag)) Artikelnummer

Beispiele greatest(4, 7, 1)
sysdate+1 Ergebnis: 7
Ergebnis: morgen um die gleiche Zeit vsize(sysdate)
round(sysdate) Ergebnis: 8
Ergebnis: heute um 00:00:00 Uhr
Konvertierungsfunktionen
last_day(to_date('10.12.2002', 'dd.mm.yyyy')) Umwandlung der Zahl in eine Zeichenkette je nach
to_char(a[,fmt])
Ergebnis: 31.12.2002 00:00:00 Format fmt.
months_between(to_date('25.12.2002', 'dd.mm.yyyy'), to_date('10.11.2002', Umwandlung des Datums d in eine Zeichenkette je nach
'dd.mm.yyyy')) to_char(d[,fmt])
Format fmt.
Ergebnis: 1,48387097
to_date(s[,fmt]) Umwandlung der Zeichenkette s in ein Datum
months_between(to_date('25.12.2002', 'dd.mm.yyyy'), to_date('25.11.2002',
'dd.mm.yyyy')) to_number(s[,fmt]) Umwandlung der Zeichenkette s in eine Zahl
Ergebnis: 1 hextoraw(s) Umwandlung einer Zeichenkette s in Binärdaten
Als Basis zur Berechnung werden immer 31 Tage je Monat zugrunde gelegt. Umwandlung von Binärdaten b in eine Zeichenkette mit
rawtohex(b)
entsprechenden Hex-Ziffern

Beispiele
insert into druckersteuerung (befehl, code) values ('6 Zeilen/Zoll',
hextoraw('1B266C3644'));
to_char(23012.9, '000G000D00') Lösung 1:
Ergebnis: '023.012,90' select *
from auftrag
to_char(to_date('24.12.2002','dd.mm.yyyy'),'hh24:mi:ss') where datum = to_date ('21.09.1999', 'dd.mm.yyyy');
Ergebnis: '00:00:00' => Problem: Was ist mit der Uhrzeit?
Konvertierung von Datum in Zeichenkette (to_char) und umgekehrt Lösung 2:
(to_date) select *
• Datum in Zeichenkette: to_char (datum, format) from auftrag
• Zeichenkette in Datum: to_date (zeichenkette, format) where to_char (datum, 'dd.mm.yyyy') = '21.09.1999';
oder
select *
Wichtige Formatzeichen from auftrag
DD Tag des Monats (1 - 31) where trunc(datum) = to_date ('21.09.1999', 'dd.mm.yyyy');
DAY Name des Tages ('MONTAG' bis 'SONNTAG') Jeder Wert vom Datentyp date ist sekundengenau! Wird bei der Umwandlung
day Name des Tages ('montag' bis 'sonntag') mit to_date die Uhrzeit nicht angegeben, so erhält der umgewandelte Wert die
Day Name des Tages ('Montag' bis 'Sonntag') Uhrzeit "0 Uhr 0 Minuten 0 Sekunden".
MM Monat des Jahres ( 1 - 12) Beispiele
to_date ('10.08.1999', 'dd.mm.yyyy')
MON Monatsname dreistellig ('JAN' bis 'DEZ') Ergebnis: Uhrzeit "0 Uhr 0 Min. 0 Sek"
mon Monatsname dreistellig ('jan' bis 'dez') to_date ('10.08.1999 13', 'dd.mm.yyyy hh24')
Mon Monatsname dreistellig ('Jan' bis 'Dez') Ergebnis: Uhrzeit: "13 Uhr 0 Min. 0 Sek"
MONTH Monatsname ('JANUAR' bis 'DEZEMBER') Konvertierung von Zahlen in Zeichenketten (to_char) und umgekehrt
(to_number)
month Monatsname ('januar' bis 'dezember') • Zahl in Zeichenketten: to_char (zahl, format)
Month Monatsname ('Januar' bis 'Dezember') • Zeichenkette in Zahl: to_number (zeichenkette, format)
YY Jahr zweistellig (00 bis 99)
YYYY Jahr vierstellig
Wichtige Formatzeichen
HH24 Uhrzeit: Stunde (0 - 24)
9 Zahl 0 bis 9 ohne führende Null
MI Uhrzeit: Minute (0-60)
0 Zahl 0 bis 9 mit führender Null
SS Uhrzeit: Sekunde (0-60)
S Vorzeichen + oder -
IW Kalenderwoche nach ISO
D Dezimalpunkt oder Komma
Q Quartal (1, 2, 3, 4)
G Tausenderpunkt oder Komma
-/,.;:. Formatierungszeichen
FM Abschneiden von führenden Blanks
"beliebiger Text"
Beispiele
select to_char (anzahl * preis, '999G990D00') Umsatz
from auftrag_pos
Beispiele where auftrag_nr = 1;
select to_char (datum, 'dd.mm.yyyy hh24:mi:ss') Datum from auftrag; select preis * to_number ('1,8', '9D9')
select to_char (to_date ('10.08.1999', 'dd.mm.yyyy'), 'dd.mm.yyyy hh24:mi:ss') from auftrag_pos
from dual; where auftrag_nr = 1;
Aufgabe: Bestimme die Anzahl der Aufträge vom 21. September 1999: