FreeAdhocUDF für InterBase und FireBird in deutschin englishen françaisen españolin italianoa português
homeprevious pageÜbersicht • overview • aperçunext pagelast page Seite empfehlen • advice website • Mailing-Liste • mailinglist • liste de diffusionwas ich vermisse • what I missed •eMail Kommentar • eMail commentprintsitemap
BLOb-Funktionen 21 Funktionen
Umwandeln 3 Funktionen
Bearbeiten 9 Funktionen
Berechnen 5 Funktionen
Vergleichen 2 Funktion
Suchen/Ermitteln 2 Funktion
Funktion kann ab FireBird 2 (noch) kein <null> zurückgeben
ab InterBase Version 2007 kann diese Funktion ersetzt werden
ab FireBird Version 2.1 kann diese Funktion ersetzt werden
Output RETURN Mechanismus wenn nicht anderes angegeben: FREE_IT
Die TestSQLs mit NULL funktionieren nur ab FireBird 2
 
BLOb-Funktionen: Umwandeln
F_BLOBASPCHAR
kompatibel zu FreeUDFLib, FreeUDFLib AvERP, GrUDF
überflüssig, BLObs können wie Strings angesprochen werden
Entrypoint blobaspchar
Input BLOB
TextBlob, der nach VarChar konvertiert werden soll
Output CSTRING(32760) String nach (Var)Char konvertiert
TestSQL (für TestISO.GDB)
SELECT 'ein einzeiliger TextBLOb' AS ISCORRECT, TEXTBLOB, F_BLOBASPCHAR(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 1;
SELECT '' AS ISCORRECT, F_BLOBASPCHAR(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 11;
SELECT NULL AS ISCORRECT, F_BLOBASPCHAR(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
F_STRBLOB kompatibel zu FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP, GrUDF
Input/Output-kompatibel zu rFunc (B_PUT_SEGMENT)
überflüssig, BLObs können wie Strings angesprochen werden
Entrypoint strblob
Input CSTRING(32760) String, der nach BLOb konvertiert werden soll
Output BLOB BLOb
TestSQL
SELECT 'soviel für heute' AS ISCORRECT, F_BLOBASPCHAR(F_STRBLOB('soviel für heute')) FROM RDB$DATABASE;
nach oben • go top •
F_BLOB2EXCEL Funktion von adhoc
ersetzbar durch F_STR2EXCEL
Entrypoint excelblob
Input BLOB BLOb, der für Excel umgewandelt werden soll
Output CSTRING(32760) für Excel aufbereiteter BLOb
Um auch mehrzeilige Texte und Texte, die Doppelhochkommata enthalten, aus BLObs nach Excel exportieren zu können, bedarf es einiger Umformungen. Diese Funktion erledigt das:
- fügt am Anfang und Ende des Strings jeweils ein Doppelhochkomma hinzu
- verdoppelt alle im Text selber vorkommenden Doppelhochkommata
- entfernt alle CHR(13) aus dem String
- begrenzt den übergebenen BLOb auf 32760 Zeichen (Grenze von Excel für ein Feld)
TestSQL
SELECT '"ein dreizeiliger TextBLOb' || F_LF() || 'mit einer zweiten Zeile' || F_LF() || 'und einer dritten Zeile"' AS ISCORRECT, F_BLOB2EXCEL(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 3;
SELECT NULL AS ISCORRECT, F_BLOB2EXCEL(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 10;
Anmerkung:
Da es eigentlich keinen Sinn macht, einen in der Datenbank vorhandenen (sehr) langen Text in eine Excel-Zelle zu exportieren, dürfte diese Funktion (erst) in Kombination mit F_LEFT bzw. F_RIGHT erst praktikabel sein. Bsp.:
SELECT F_RIGHT(F_BLOB2EXCEL(BLObFeldTAGEBUCH), 1000) FROM ... exportiert z.B. die letzten 1000 Zeichen des Tagebuchs.
nach oben • go top •
 
BLOb-Funktionen: Bearbeiten
F_BLOBLEFT
kompatibel zu FreeUDFLib, FreeUDFLib AvERP, GrUDF
ersetzbar durch F_LEFT
ersetzbar die eingebaute Funktion LEFT
Entrypoint blobleft
Input BLOB
INTEGER
Text-Blob, der beschnitten werden soll
Länge des auszugebenden Strings
Output CSTRING(32760) String beschnitten auf die Anzahl Zeichen von links von Parameter 2
Zählung beginnt bei 1
TestSQL (für TestISO.GDB)
SELECT 'ein einzeiliger' AS ISCORRECT, F_BLOBLEFT(TEXTBLOB, 15) FROM BLOBTEST WHERE BLOBTESTID = 1;
SELECT '' AS ISCORRECT, F_BLOBLEFT(TEXTBLOB, 15) FROM BLOBTEST WHERE BLOBTESTID = 11;
SELECT NULL AS ISCORRECT, F_BLOBLEFT(TEXTBLOB, NULL) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
F_BLOBMID
kompatibel zu FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP, GrUDF
ersetzbar durch F_MID
Entrypoint blobmid
F_RBLOBMID Input/Output-kompatibel zu rFunc (B_SUBSTR, B_LONGSUBSTR)
ersetzbar durch F_COPY oder F_STRCOPY
Entrypoint r_blobmid
Input BLOB
INTEGER
INTEGER
TextBlob, aus dem eine Zeichenkette ermittelt werden soll
Position, an der der zu ermittelnde String beginnt
Länge des zu ermittelnden Strings
Output CSTRING(32760) Anzahl der Buchstaben (Parameter 3) des eingegebenen Text ab der eingegebenen Buchstabennummer (Parameter 2)
F_BLOBMID - Zählung beginnt für Parameter 2 bei 0.
F_RBLOBMID - Zählung beginnt für Parameter 2 bei 1.
TestSQL (für TestISO.GDB)
SELECT 'zwei' AS ISCORRECT, F_BLOBMID(TEXTBLOB, 4, 4) FROM BLOBTEST WHERE BLOBTESTID = 2;
SELECT NULL AS ISCORRECT, F_BLOBMID(TEXTBLOB, NULL, NULL) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
F_BLOBRIGHT kompatibel zu FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP, GrUDF
ersetzbar durch F_RIGHT
ersetzbar durch die eingebaute Funktion RIGHT
Entrypoint blobright
Input BLOB
INTEGER
Text-Blob, der beschnitten werden soll
Anzahl der Zeichen von rechts
Output CSTRING(32760) String beschnitten auf die Anzahl Zeichen gezählt von rechts von Parameter 2
Zählung beginnt bei 1
TestSQL (für TestISO.GDB)
SELECT 'dritten Zeile' AS ISCORRECT, F_BLOBRIGHT(TEXTBLOB, 13) FROM BLOBTEST WHERE BLOBTESTID = 3;
SELECT NULL AS ISCORRECT, F_BLOBRIGHT(TEXTBLOB, NULL) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
F_BLOBCAT kompatibel zu GrUDF
ersetzbar durch || (wie bei Strings)
Entrypoint blobcat
Input BLOB
BLOB
Text-Blob, der mit Text-BLOb aus Parameter 2 zusammengeführt werden soll
Text-Blob, der an Text-BLOb aus Parameter 1 angehängt werden soll
Output BLOB Verkettet die Inhalte zweier Blobfelder zu einem Gemeinsamen
Die Funktion macht nach dem 1. BLOb einen CRLF, bevor sie den 2. BLOb anhängt.
TestSQL (für TestISO.GDB)
INSERT INTO BLOBTEST (TEXTBLOB) SELECT F_BLOBCAT(TEXTBLOB, (SELECT TEXTBLOB FROM BLOBTEST WHERE BLOBTESTID = 2)) FROM BLOBTEST WHERE BLOBTESTID = 1;
Erzeugt in Tabelle BLOBTEST einen neuen Datensatz, wo das Feld TEXTBLOB sich aus den zusammengefügten Inhalten von TEXTBLOB des Datensatzes mit der TEXTBLOBID 1 und des Datensatzes mit der TEXTBLOBID 2 ergibt.
nach oben • go top •
F_BLOBCATSTR kompatibel zu GrUDF
ersetzbar durch || (wie bei Strings)
Entrypoint blobcatstr
Input BLOB
CSTRING(32760)
Text-Blob, der mit Text-String aus Parameter 2 zusammengeführt werden soll
Text-String, der an Text-BLOb aus Parameter 1 angehängt werden soll
Output BLOB Verkettet den Inhalt eines Blobfeldes mit einem String zu einem BLOb
Die Funktion macht nach dem 1. BLOb einen CRLF, bevor sie den 2. String anhängt.
TestSQL (für TestISO.GDB)
INSERT INTO BLOBTEST (TEXTBLOB) SELECT F_BLOBCATSTR(TEXTBLOB, 'Diese Zeile wurde angehängt') FROM BLOBTEST WHERE BLOBTESTID = 1;
Erzeugt in Tabelle BLOBTEST einen neuen Datensatz, wo das Feld TEXTBLOB sich aus den zusammengefügten Inhalten von TEXTBLOB des Datensatzes mit der TEXTBLOBID 1 und des Strings ‘Diese Zeile wurde angehängt'’ ergibt.
nach oben • go top •
F_BLOBREPLACESTRING Funktion von adhoc
ersetzbar durch F_REPLACESTRING
Entrypoint blobreplacestring
Input BLOB
CSTRING(254)
CSTRING(254)
INTEGER
INTEGER
Text-BLOb, indem eine Zeichenkette ausgetauscht werden soll
der auszutauschende String
der String, der gesetzt werden soll
0 = nur das erste Vorkommen austauschen, 1 = alle Vorkommen austauschen
0 = Groß-/Kleinschreibung berücksichtigen, 1 = nicht berücksichtigen
Output BLOB Ersetzt in einem Text-BLOb eine/alle Zeichenkette/n aus Parameter 2 durch eine andere Zeichenkette aus Parameter 3
Kann auch mehrmals austauschen sowie Groß-Kleinschreibung berücksichtigen.
TestSQL (für TestISO.GDB)
SELECT 'vier einzeiliger TextBLOb' AS ISCORRECT, F_BLOBREPLACESTRING(TEXTBLOB, 'ein', 'vier', 0, 0) FROM BLOBTEST WHERE BLOBTESTID = 1;
SELECT 'vier vierzeiliger TextBLOb' AS ISCORRECT, F_BLOBREPLACESTRING(TEXTBLOB, 'ein', 'vier', 1, 0) FROM BLOBTEST WHERE BLOBTESTID = 1;
nach oben • go top •
F_BLOBSUBSTR kompatibel zu FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP, GrUDF
Input/Output-kompatibel zu rFunc (B_STRPOS)
ersetzbar durch F_SUBSTR
Entrypoint blobsubstr
Input BLOB
CSTRING(1024)
TextBLOb (in dem die Position von Parameter 2 ermittelt werden soll)
String 2 (dessen Position in Parameter 1 ermittelt werden soll)
Output INTEGER erste Position im BLOb, bei der der String 2 beginnt
Zählung beginnt bei 0.
TestSQL (für TestISO.GDB)
SELECT 4 AS ISCORRECT, F_BLOBSUBSTR(TEXTBLOB, 'einzeiliger') FROM BLOBTEST WHERE BLOBTESTID = 1;
SELECT NULL AS ISCORRECT, F_BLOBSUBSTR(TEXTBLOB, NULL) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
F_BLOBLINE kompatibel zu FreeUDFLib, FreeUDFLib AvERP
Input/Output-kompatibel zu rFunc (B_LINE, B_LONGLINE)
Entrypoint blobline
Input BLOB
INTEGER
TextBLOb
Nr. der Zeile, die wiedergegeben werden soll
Output CSTRING(32760) <Parameter 2> Zeile des TextBLObs
TestSQL (für TestISO.GDB)
SELECT 'mit einer zweiten Zeile' AS ISCORRECT, F_BLOBLINE(TEXTBLOB, 2) FROM BLOBTEST WHERE BLOBTESTID = 3;
SELECT NULL AS ISCORRECT, F_BLOBLINE(TEXTBLOB, NULL) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
 
BLOb-Funktionen: Berechnen
F_BLOBSIZE kompatibel zu FreeUDFLib, FreeUDFLib AvERP, GrUDF
Input/Output-kompatibel zu rFunc (B_TOTAL_LENGTH)
Entrypoint blobsize
Input BLOB TextBlob
Output INTEGER Anzahl der Zeichen im TextBLOb
Analog F_STRINGLENGTH. Zeilenumbrüche CRLF werden als 2 Zeichen gezählt, bei einem BinarBlob die Größe der Datei in Byte an
TestSQL (für TestISO.GDB)
Für TextBLOb:
SELECT 50 AS ISCORRECT, F_BLOBSIZE(TEXTBLOB), F_STRINGLENGTH(F_BLOBASPCHAR(TEXTBLOB)) FROM BLOBTEST WHERE BLOBTESTID = 2;
SELECT 0 AS ISCORRECT, F_BLOBSIZE(TEXTBLOB), F_STRINGLENGTH(F_BLOBASPCHAR(TEXTBLOB))
FROM BLOBTEST WHERE BLOBTESTID = 11;
SELECT NULL AS ISCORRECT, F_BLOBSIZE(TEXTBLOB), F_STRINGLENGTH(F_BLOBASPCHAR(TEXTBLOB))
FROM BLOBTEST WHERE BLOBTESTID = 10;
Für BinärBLOb:
SELECT 1426 AS ISCORRECT, F_BLOBSIZE(BINAERBLOB) FROM BLOBTEST WHERE BLOBTESTID = 4;
nach oben • go top •
F_BLOBMAXSEGMENTLENGTH kompatibel zu FreeUDFLib
Input/Output-kompatibel zu rFunc (B_MAX_SEGMENT)
Entrypoint blobmaxsegmentlength
Input BLOB TextBLOb oder BinärBLOb
Output INTEGER Anzahl der Bytes des größten BLOB-Segmentes
TestSQL (für TestISO.GDB)
Für TextBLOb:
SELECT 16384 AS ISCORRECT, F_BLOBMAXSEGMENTLENGTH(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 8;
SELECT NULL AS ISCORRECT, F_BLOBMAXSEGMENTLENGTH(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 10;
Für BinärBLOb:
SELECT 16384 AS ISCORRECT, F_BLOBMAXSEGMENTLENGTH(BINAERBLOB) FROM BLOBTEST WHERE BLOBTESTID = 7;
nach oben • go top •
F_BLOBSEGMENTCOUNT kompatibel zu FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP, GrUDF
Input/Output-kompatibel zu rFunc
(B_NUMBER_SEGMENTS)
Entrypoint blobsegmentcount
Input BLOb TextBLOb oder BinärBLOb
Output INTEGER Anzahl der  BLOB-Segmente
TestSQL (für TestISO.GDB)
Für TextBLOb:
SELECT 3 AS ISCORRECT, F_BLOBSEGMENTCOUNT(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 8;
SELECT NULL AS ISCORRECT, F_BLOBSEGMENTCOUNT(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 10;
Für BinärBLOb:
SELECT 2 AS ISCORRECT, F_BLOBSEGMENTCOUNT(BINAERBLOB) FROM BLOBTEST WHERE BLOBTESTID = 7;
nach oben • go top •
F_BLOBLINECOUNT Funktion von adhoc
Input/Output-kompatibel zu rFunc (B_LINE_COUNT)
Entrypoint bloblinecount
Input BLOB TextBLOb
Output INTEGER Anzahl der Zeilen in einem TextBLOb
TestSQL (für TestISO.GDB)
SELECT 3 AS ISCORRECT, F_BLOBLINECOUNT(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 3;
SELECT NULL AS ISCORRECT, F_BLOBLINECOUNT(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
F_BLOBWORDCOUNT Funktion von adhoc
ersetzbar durch F_WORDCOUNT
Entrypoint blobwordcount
Input BLOB TextBLOb
Output INTEGER Anzahl der Wörter in einem TextBLOb
Ein Wort endet durch ein oder mehrere Leerzeichen, TAB oder CRLF.
TESTSQL
SELECT 11 AS ISCORRECT, F_BLOBWORDCOUNT(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 3;
SELECT NULL AS ISCORRECT, F_BLOBWORDCOUNT(TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 10;
nach oben • go top •
 
BLOb-Funktionen: Vergleichen
F_BLOBCOMPARE kompatibel zu FreeUDFLib, GrUDF (BLOBICOMP)
überflüssig, BLOBs können wie Strings direkt verglichen werden
Entrypoint blobcompare
Input BLOB
BLOB
BLOb 1
BLOb 2
Output INTEGER 1 für identisch, 0 für nicht identisch
TestSQL (für TestISO.GDB)
SELECT 1 AS ISCORRECT, F_BLOBCOMPARE(TEXTBLOB, TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 3;
SELECT NULL AS ISCORRECT, F_BLOBCOMPARE(TEXTBLOB, TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 10;
SELECT 0 AS ISCORRECT, F_BLOBCOMPARE(TEXTBLOB, (SELECT TEXTBLOB FROM BLOBTEST WHERE BLOBTESTID = 2)) FROM BLOBTEST WHERE BLOBTESTID = 3;
nach oben • go top •
F_BLOBCMP Input/Output-kompatibel zu rFunc (B_STRCMP)
überflüssig, BLOBs können wie Strings direkt verglichen werden
Entrypoint b_strcmp
Input BLOB
BLOB
BLOb 1
BLOb 2
Output INTEGER output > 0 : BLOb 1 ist kleiner als BLOb 2
output = 0 : BLOb 1 = BLOb 2
output < 0 : BLOb 1 ist größer als BLOb 2
Achtung: in der original rFunc-Funktion B_STRCMP ist im Vergleich zur String-Funktion STRCMP der output bzgl. positiv und negativ vertauscht - bei der String-Funktion bedeutet ein positiver Wert, dass der erste String größer ist, bei der BLOB-Funktion bedeutet das, dass der zweite BLOb größer ist! Aus Kompatibilitätsgründen haben wir dieses Verhalten genau so in die FreeAdhocUDF übernommen!
Achtung: Die Windows-Versionen liefern bei Ungleichheit andere Zahlenwerte als die Linux-Versionen, was aber nichts an der Aussage ändert (s.o. Output: > 0 oder < 0)
TestSQL (für TestISO.GDB/FDB)
SELECT 0 AS ISCORRECT, F_BLOBCMP(TEXTBLOB, TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 3;
Linux-Versionen:
SELECT 1 AS ISCORRECT, F_BLOBCMP(TEXTBLOB, (SELECT TEXTBLOB FROM BLOBTEST WHERE
BLOBTESTID = 2)) FROM BLOBTEST WHERE BLOBTESTID = 3;
Windows-Versionen:
SELECT 22 AS ISCORRECT, F_BLOBCMP(TEXTBLOB, (SELECT TEXTBLOB FROM BLOBTEST WHERE
BLOBTESTID = 2)) FROM BLOBTEST WHERE BLOBTESTID = 3;
Linux-Versionen:
SELECT -1 AS ISCORRECT, F_BLOBCMP(TEXTBLOB, (SELECT TEXTBLOB FROM BLOBTEST WHERE BLOBTESTID = 3)) FROM BLOBTEST WHERE BLOBTESTID = 2;
Windows-Versionen:
SELECT -22 AS ISCORRECT, F_BLOBCMP(TEXTBLOB, (SELECT TEXTBLOB FROM BLOBTEST WHERE BLOBTESTID = 3)) FROM BLOBTEST WHERE BLOBTESTID = 2;
beide Versionen:
SELECT NULL AS ISCORRECT, F_BLOBCMP(NULL, NULL) FROM BLOBTEST WHERE BLOBTESTID = 3;
nach oben • go top •
 
BLOb-Funktionen: Suchen/Ermitteln
F_BLOBSTRPOS Input/Output-kompatibel zu rFunc (B_STRPOS)
ersetzbar durch F_STRPOS
Entrypoint b_strpos
Input CSTRING(8190)
BLOB
String der im BLOb gesucht werden soll
BLOb indem gesucht werden soll
Output INTEGER Anfangsposition des Strings im BLOb, 0 wenn nicht gefunden
Für den Suchstring ist Gross-/Kleinschreibung wichtig. Die Zählung der Anfangsposition beginnt bei 1.
TestSQL (für TestISO.GDB)
SELECT 5 AS ISCORRECT, F_BLOBSTRPOS('zwei', TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 2;
SELECT 0 AS ISCORRECT, F_BLOBSTRPOS('Zwei', TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 2;
SELECT NULL AS ISCORRECT, F_BLOBSTRPOS(NULL, NULL) FROM BLOBTEST WHERE BLOBTESTID = 2;
nach oben • go top •
F_BLOBTEXTPOS Input/Output-kompatibel zu rFunc (B_TEXTPOS)
Entrypoint b_textpos
Input CSTRING(8190)
BLOB
String der im BLOb gesucht werden soll
BLOb indem gesucht werden soll
Output INTEGER Anfangsposition des Strings im BLOb, 0 wenn nicht gefunden
Für den Suchstring ist Gross-/Kleinschreibung nicht wichtig. Die Zählung der Anfangsposition beginnt bei 1.
TestSQL (für TestISO.GDB)
SELECT 5 AS ISCORRECT, F_BLOBTEXTPOS('zwei', TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 2;
SELECT 5 AS ISCORRECT, F_BLOBTEXTPOS('Zwei', TEXTBLOB) FROM BLOBTEST WHERE BLOBTESTID = 2;
SELECT NULL AS ISCORRECT, F_BLOBTEXTPOS(NULL, NULL) FROM BLOBTEST WHERE BLOBTESTID = 2;
vorige Seite • previous page • passée sitenach oben • go top • vers le hautnächste Seite • next page • prochain site