Split Wörter mit einem Großbuchstaben in Sql

8

weiß jemand, wie man Wörter beginnend mit Großbuchstaben von einer Zeichenkette trennt?

Beispiel:

%Vor%

erwartetes Ergebnis:

%Vor%

Wenn dies nicht möglich ist (oder zu lange), wäre auch eine Skalarfunktion in Ordnung.

Vielen Dank im Voraus.

    
jackCaller 05.05.2014, 10:56
quelle

6 Antworten

11

Hier ist eine Funktion, die ich erstellt habe, die ähnlich wie das "Entfernen nicht alphabetischer Zeichen" ist. Wie alle Streifen nicht alphabetische Zeichen aus Zeichenfolge in SQL Server?

In diesem Fall wird eine case-sensitive Sortierung verwendet, die aktiv nach einer Nicht-Leerzeichen- / Großbuchstabe-Kombination sucht und dann die STUFF-Funktion zum Einfügen des Leerzeichens verwendet. Dies ist eine skalare UDF, daher werden einige Leute sofort sagen, dass es langsamer als andere Lösungen sein wird. Zu dieser Vorstellung, sage ich, bitte teste es. Diese Funktion verwendet keine Tabellendaten und Schleifen nur so oft wie nötig, so dass Sie wahrscheinlich sehr gute Ergebnisse erzielen.

%Vor%

Nennen Sie es so:

%Vor%     
G Mastros 05.05.2014, 20:10
quelle
3

Hier ist eine Funktion, die ich gerade erstellt habe.

FUNKTION

%Vor%

Testdaten

%Vor%

Abfrage

%Vor%

Ergebnismenge

%Vor%     
M.Ali 05.05.2014 11:39
quelle
2

Wenn eine einzelne Abfrage benötigt wird, kann mit 26 REPLACE jeder Großbuchstabe wie

überprüft werden %Vor%

Nicht die schönste Sache, aber es wird funktionieren.

BEARBEITEN
Nur um eine andere Funktion hinzuzufügen, um das Gleiche auf eine andere Art und Weise zu tun als die anderen Antworten.

%Vor%

Dieser verwendet die Möglichkeit von TSQL, um eine String-Variable zu verketten, ich musste den TOP N-Trick verwenden, um die Chars CTE-Zeilen in der richtigen Reihenfolge zu erzwingen

    
Serpiton 05.05.2014 14:04
quelle
1

Erstellen Sie eine Zahlentabelle. Es gibt einige hervorragende Beiträge zu SO, die Ihnen zeigen, wie Sie dies tun können. Füllen Sie den Wert mit Werten bis zur maximalen Länge Ihrer Eingabezeichenfolge auf. Wählen Sie die Werte von 1 bis zur tatsächlichen Länge der aktuellen Eingabezeichenfolge aus. Überkreuzen Sie diese Liste von Zahlen mit der Eingabezeichenfolge. Verwenden Sie das Ergebnis zu SUBSTRING() für jedes Zeichen. Dann können Sie entweder die resultierende Liste von Ein-Zeichen-Werten mit einer vorbelegten Tabellenwert-Variablen vergleichen oder jedes Zeichen in eine ganze Zahl mit ASCII() konvertieren und nur auswählen diejenigen zwischen 65 ('A') und 90 ('Z'). An dieser Stelle haben Sie eine Liste, die die Position jedes Großbuchstabens in Ihrer Eingabezeichenfolge darstellt. UNION die maximale Länge Ihrer Eingabezeichenfolge am Ende dieser Liste. Sie werden sehen, warum in nur einer Sekunde. Jetzt können Sie SUBSTRING() Ihre Eingabevariable beginnen, beginnend mit der Zahl, die durch die Zeile N gegeben ist und eine Länge von (die durch die Zeile N + 1 gegebene Zahl) - (Die Zahl, die durch die Zeile N gegeben ist). Deshalb musst du UNION die extra Nummer am Ende haben. Verketten Sie schließlich alle diese Teilstrings durch Leerzeichen getrennt mit dem Algorithmus Ihrer Wahl.

Tut mir leid, ich habe keine Instanz vor mir, um Code auszuprobieren. Klingt nach einer lustigen Aufgabe. Ich denke, es mit verschachtelten SELECT -Anweisungen zu tun, wird verschachtelt und nicht wartbar; besser, es als CTEs auszulegen, IMHO.

    
Michael Green 05.05.2014 11:39
quelle
0

Ich verwende eine ITVF-Funktion (Tabellenfunktion). In Bezug auf die Leistung funktioniert die Inline-Funktion wie eine Ansicht

%Vor%     
hkravitz 24.07.2016 19:39
quelle
0

Ich weiß, dass es bereits einige gute Antworten gibt, aber wenn Sie das Erstellen einer Funktion vermeiden möchten, können Sie auch einen rekursiven CTE verwenden. Es ist sicherlich keine saubere Art, dies zu tun, aber es funktioniert.

%Vor%

Wie gesagt, das ist keine schöne Art, eine Abfrage zu schreiben, aber ich benutze solche Dinge, wenn ich nur einige Ad-hoc-Abfragen schreibe, bei denen ich der Datenbank keine neuen Artefakte hinzufügen möchte. Sie können dies auch verwenden, um Ihre Funktion als eine Inline-Tabellenwertfunktion zu erstellen, die immer ein bisschen schöner ist.

    
Nelson 28.02.2017 17:13
quelle

Tags und Links