# Derby/JavaDB anwenden von Regular Expressions



## OneAndZero (5. Nov 2008)

Hi,

ich bin wieder mal auf ein Problem mit der JavaDB Derby gestoßen!
Ich müsste für eine SQL Abfrage eine regexp nutzen! Leider finde ich keinen schnellen weg das in derby umzusetzen.
Man kann wohl eine eigene Function schreiben usw, aber das wollte ich eigentlich nicht! Hat vielleicht jemand eine Idee?

Hier mal ein Auszug aus meiner Abfrage die NICHT unter Derby läuft!


```
length(substring(f.pathName from '[\\\\/][a-zA-Z0-9\\_]*\\.')) - 2 as element_name_length
```

mfg


----------



## HoaX (6. Nov 2008)

also in der zeit die du hier auf ne antwort wartest kannst du locker ne funktion schreiben. das ist kein großes hexenwerk bei derby. java hat ja die regex-klassen, das ist fast n dreizeiler ...


----------



## schlaubischlumpf (17. Nov 2008)

@HoaX: Sehr konstruktiv 

Ich habe deinen Rat befolgt und die Oracle-Funktion "REGEXP_SUBSTR" für meine Zwecke nachgebaut. Einmal die Java-Klasse:

package de.schlaubischlumpf.database;

public class DerbyFunctions
{
	/* Nachbildung der Oracle-Funktion REGEXP_SUBSTR
	 * Folgendes SQL absetzen, um die Funktion in Derby bekannt zu machen
	 *
	 CREATE FUNCTION REGEXP_SUBSTR(inputString VARCHAR(32672), regexString VARCHAR(32672))
	 RETURNS VARCHAR(32672)
	 PARAMETER STYLE JAVA
	 NO SQL LANGUAGE JAVA
	 EXTERNAL NAME 'de.schlaubischlumpf.database.DerbyFunctions.regexpSubstring'

	 */
	public static String regexpSubstring(String in, String regex)
	{
		if (in == null || regex == null) return in;
		return in.replace(in.replaceAll(regex, ""), "");
	}

}


Das SQL 
CREATE FUNCTION REGEXP_SUBSTR(inputString VARCHAR(32672), regexString VARCHAR(32672))
RETURNS VARCHAR(32672)
PARAMETER STYLE JAVA
NO SQL LANGUAGE JAVA
EXTERNAL NAME 'de.schlaubischlumpf.database.DerbyFunctions.regexpSubstring'

muss dann noch in die Derby abgesetzt werden (z.B. per Squirrel-Sql oder in ner JSP oder so). Und dann klappen selects wie z.B. "Select REGEXP_SUBSTR(name, '^[^(]*') as cleanname from company".


----------

