Ich habe keine Funktion wie isupper
oder islower
in Postgresql gefunden. Was ich tatsächlich brauche, ist, alle Datensätze aus einer Tabelle auszuwählen, in der eine der Spalten Wörter mit Großbuchstaben (aber nicht Großbuchstaben) enthält. Das heißt, das erste Symbol jedes Wortes ist ein Großbuchstabe und das zweite ist ein Kleinbuchstabe. Wörter können in jeder Sprache geschrieben werden.Wie kann man feststellen, ob ein Zeichen Groß- oder Kleinschreibung in postgresql ist?
Antwort
Was ist nur mit der Auswahl der Zeilen, wo die Groß-/Kleinschreibung des ersten Buchstaben in der Spalte nicht gleich der Kleinbuchstaben Version des ersten Buchstabens in der Spalte ist?
Etwas wie:
SELECT * FROM table
WHERE SUBSTRING(col FROM 1 FOR 1) != LOWER(SUBSTRING(col FROM 1 FOR 1))
In der Theorie sollte das oben als auch die Datenbank charset/locale berücksichtigen.
Da postgresql
Groß- und Kleinschreibung für String-Vergleiche, BobG Antwort besser ist
Eine andere Lösung ascii mit string functions
Gefällt Ihnen dieses
SELECT *
FROM yourTable
WHERE (ascii(LEFT(yourColumn), 1) BETWEEN 65 AND 90)
AND (ascii(SUBSTRING(yourColumn from 2 for 1), 1) BETWEEN 97 AND 122)
zu verwenden wäre, wenn es zwischen 65 und 90 ist es ein Großbuchstabe, wie Sie in der Tabelle Ascii sehen können ich verknüpfte
wenn es 's zwischen 97 und 122 ist es Kleinbuchstaben
Diese Lösung ist gut, Bot funktioniert nicht für Russisch, Chinesisch und andere Nicht-ASCII-Sprachen;) –
können Sie Postgres regexp verwenden für Ihre spezifische Bedingung zu testen:
select * from sample
where col ~ E'^[[:upper:]][^[:upper:]]'
Sie E'^[[:upper:]][[:lower:]]'
verwenden könnten, wenn das zweite Zeichen anstelle Klein Alpha jedem Nicht groß geschrieben werden muss.
Wenn Sie wissen wollen, ob eine Zeichenfolge enthält mindestens einen Kleinbuchstaben, dann können Sie die obere Funktion [obere (mystr) = mystr] verwenden:
dbname=> select upper('AAbbCC')='AAbbCC';
?column?
----------
f
(1 row)
dbname=> select upper('AABBCC')='AABBCC';
?column?
----------
t
(1 row)
Sie können die gleiche Logik verwenden für die Überprüfung dass eine Zeichenfolge mindestens ein Großbuchstabe mit der unteren() SQL-Funktion enthält.
Für kompliziertere Muster müssen Sie regulären Ausdruck oder Teilstring verwenden, wie von früheren Antworten vorgeschlagen.
Smart! Ich habe nicht über diese Ursache nachgedacht, weil ich an MySQL gewöhnt bin, was bei String-Vergleichen keine Groß-/Kleinschreibung erfordert. – Marc
So habe ich es gemacht, es ist eine Lösung für mein spezielles Problem. –
@Marc: Vielleicht habe ich Ihren Kommentar falsch gelesen, aber als ich den SELECT gepostet habe, habe ich die Syntax in MySQL anstelle von Postgres getestet, da ich keine Postgres-Instanz griffbereit hatte (ich wusste bereits die LOWER/UPPER/SUBSTRING-Funktionen) gültig in Postgres). Es funktionierte gut in MySQL (v 5.1.something) und lieferte erfolgreich eine Zeile, die 'Abc' enthielt, aber nicht die Zeile, die 'xyz' enthielt. – BobG