Usuń losowe wyrażenie z łańcucha

Mam taki ciąg / kolumnę

String a = "000003023_AggregateStopLossLimit_W x3A 973911_2012-12-22.PDF";

Chcę utworzyć podciąg, który nie ma części' x3A 973911' w tym.

Co znaczy, że chcę coś takiego,

000003023_AggregateStopLossLimit_W_2012-12-22.PDF

Istnieje lista takich ciągów, które będą miały różne wartości, ale format będzie taki sam. Chcę, aby część sznurka została usunięta po pierwszej spacji i kończy się przy następnym „_”.

Właśnie to już zrobiłem, to działa dobrze, ale chcę wiedzieć, czy jest lepszy sposób na zrobienie tego.

String b = a.replaceAll(a.substring(a.indexOf(" "), a.indexOf("_",a.indexOf(" "))),"");

Byłoby jeszcze lepiej, gdybym mógł to zrobić w samej db, która jest wyrocznią, zamiast w java. Jakikolwiek pomysł, aby pobrać ten sformatowany ciąg bezpośrednio z kolumny przy użyciu select?

Jeszcze jedno wymaganie, nie chcę wyświetlać rozszerzenia pliku.
Więc nic po „.” powinien być wyświetlany, co oznacza coś takiego'000003023_AggregateStopLossLimit_W_2012-12-22'
Wypróbowałem poniższe, korzystając z poprzedniego rozwiązania APC

 select regexp_replace ( your_string
                          , '([^[:space]]*) (.*)_(.*)....'
                          , '\1_\3') as new_string from your_table

Na razie działa dobrze.
Powinno to usuwać ostatnie 4 znaki i grozić, że nie uzyskasz właściwego wyniku, jeśli rozszerzenie jest większe lub mniejsze niż 3 lub jeśli łańcuch nie jest obcięty.
Szukam bardziej estetycznego sposobu na to.
Jakaś szansa?

questionAnswers(7)

yourAnswerToTheQuestion