2016-07-28 4 views
1

Ich loooking für einen regulären Ausdruck oder etwas, das von dieser:Split von Groß Oracle

------------------------ 
| id | prop_name | 
------------------------ 
| 1 | isThisAnExample | 
------------------------ 

Um dies:

----------------------------- 
| id | prop_name   | 
----------------------------- 
| 1 | Is This An Example | 
----------------------------- 

Natürlich wäre es cool, wenn das erste Zeichen in Groß- und auch wenn die anderen Wörter mit Kleinbuchstaben beginnen. Aber nur sie zu spalten wird auch okay sein.

+0

Sie werden finde deine Antwort hier. http://stackoverflow.com/questions/23470794/split-words-with-a-capital-letter-in-sql –

+2

@Marc Das ist nicht Oracle. – Rene

Antwort

1

Vielleicht ist das der regexp Sie suchen

„zwischen den einzelnen Kleinbuchstaben von einem Großbuchstaben gefolgt ein leeres Einfügen“:

select regexp_replace('IsThisAnExample', '([[:lower:]])([[:upper:]])', '\1 \2') from dual 

Das erste Zeichen kann einfach durch eine obere Fall ersetzt Brief von

select upper(substr('isThisAn Example', 1,1))||substr('isThisAn Example', 2) from dual; 

So ersetzt zuerst das erste Zeichen und REGEXP_REPLACE für das Ergebnis:

select regexp_replace(upper(substr('isThisAn Example', 1,1))||substr('isThisAn Example', 2), '([[:lower:]])([[:upper:]])', '\1 \2') from dual; 

Wenn nur das erste Zeichen Ihres Satzes soll ein Großbuchstabe sein, dann versuchen:

select upper(substr(regexp_replace('IsThisAnExample', '([[:lower:]])([[:upper:]])', '\1 \2'),1,1))|| 
     lower(substr(regexp_replace('IsThisAnExample', '([[:lower:]])([[:upper:]])', '\1 \2'),2)) 
from dual 
+0

Großartig. Jetzt, wenn Sie Ihre Lösung erweitern können: "Fügen Sie ein Leerzeichen zwischen jedem Kleinbuchstaben, gefolgt von einem Großbuchstaben und machen diese Kleinbuchstaben oben und auch das erste Zeichen der Zeile" wird alles sein, was ich suche –

+2

Es ist fertig , siehe meine Einstellungen :-) –

+0

Ja, wir haben jetzt den ersten Char, was großartig ist! 'isThisAnExample' -> 'Ist das ein Beispiel'. Nun ist die letzte Anfrage von "Ist das ein Beispiel" -> "Ist das ein Beispiel". –

0

Bessere Nutzung regex, aber trotzdem:

SELECT listagg(splitted, '') within GROUP (ORDER BY lvl) FROM( 
    SELECT LEVEL lvl, CASE WHEN SUBSTR(your_string, LEVEL, 1) = 
        UPPER(SUBSTR(your_string, LEVEL, 1)) 
     THEN ' ' || SUBSTR(your_string, LEVEL, 1) ELSE 
        SUBSTR(your_string, LEVEL, 1) END splitted 
FROM (SELECT 'isThisAnExample' your_string FROM dual) 
CONNECT BY LEVEL <= LENGTH(your_string)); 
0

ähnlich wie Frank-Lösung, aber einfacher (die Verwendung von regulären Ausdrücken wird so weit wie möglich reduziert):

with 
    input (str) as (
     select 'isThisAnExample' from dual 
    ) 
select upper(substr(str, 1, 1)) || 
     lower(regexp_replace(substr(str, 2), '(^|[[:lower:]])([[:upper:]])', '\1 \2')) 
      as modified_str 
from input; 

MODIFIED_STR 
------------------ 
Is this an example 

1 row selected. 
+0

Ja funktioniert gut. Gut gemacht :) –