Возможно ли извлечь строку из поля varchar в Apache Derby?Regex in Apache Derby
Я хотел бы использовать регулярное выражение. Что-то вроде:
select
regex('Joe Bloggs', '(\w+)\s(\w+)', 2) as surname
from SYSIBM.SYSDUMMY1
Возможно ли извлечь строку из поля varchar в Apache Derby?Regex in Apache Derby
Я хотел бы использовать регулярное выражение. Что-то вроде:
select
regex('Joe Bloggs', '(\w+)\s(\w+)', 2) as surname
from SYSIBM.SYSDUMMY1
Apache Derby не имеет собственной функции, но это возможно, чтобы создать свой собственный и вызвать его из базы данных.
Во-первых, создать метод Java, который будет обрабатывать регулярное выражение:
package DbExamples.StoredProcedures;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringUtilities {
public static String regex(String source, String regex, int index) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(source);
String result = null;
if (matcher.find()) {
if (matcher.groupCount() >= index) {
result = matcher.group(index);
}
}
return result;
}
}
Затем впрыснуть .jar файл в базу данных, выполнив следующую инструкцию SQL в базе данных:
CALL SQLJ.REMOVE_JAR('App.StoredProcedures', 0);
CALL SQLJ.INSTALL_JAR('C:\dev\DbExamples\dist\DbExamples.jar', 'App.StoredProcedures', 0);
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'App.StoredProcedures');
сейчас создайте хранимую процедуру в базе данных, запустив следующую инструкцию:
drop function regex;
create function regex(sourceString varchar(8000), regex varchar(8000), index int)
returns varchar(8000)
parameter style java no sql
language java external name 'DbExamples.StoredProcedures.StringUtilities.regex';
Теперь вы можете запустить свой запрос:
select
regex('Joe Bloggs', '(\w+)\s(\w+)', 2) as surname
from SYSIBM.SYSDUMMY1
который возвращает:
Bloggs
Вы можете быть в состоянии извлечь части с ' 'Джо Bloggs'.replaceAll (" (\ W +) \ s \ ш + "," $ 1 ")' (чтобы получить 'Joe') и' 'Joe Bloggs'replaceAll ("\ w + \ s (\ w +)", "$ 2") ', чтобы получить' Bloggs'. –
Это выглядит интересным Wiktor, как я могу использовать это в инструкции sql? – Fidel
Не знаю, я просто посмотрел на http://stackoverflow.com/questions/12075355/search-java-string-for-special-characters-before-inserting-into-derbydb-varcha и предложил аналогичный подход здесь :) –