Weitere Textfunktionen in SQL (Weitere Textfunktionen in SQL), Lektion, Seite 724283
https://www.purl.org/stefan_ram/pub/weitere_textfunktionen_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Weitere Textfunktionen in SQL  (MySQL )

»CONCAT«

»string CONCAT( string s, string t )« verbindet in MySQL  Texte. Dafür kann in manchen Modi auch »||« genutzt werden, aber »CONCAT« steht in allen Modi zur Verfügung, dafür kann man »CONCAT« aber nicht mit allen Datenbanksystemen verwenden, während »||« standardkonform ist.

Da man MySQL so einstellen kann, daß »||« nicht zur Zeichenfolgenverkettung dient, scheint es sicherer zu sein, »CONCAT« zu verwenden, wenn man sicher ist, daß man immer nur mit MySQL arbeiten will. Falls man mehr Wert darauf legt, daß Skripte auch mit anderen Datenbanksystem verwendet werden können, könnte es besser sein, den Standard-Operator »||« zur Textverkettung heranzuziehen.

Konsole
SELECT CONCAT();
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONCAT'
SELECT CONCAT( 'A' );
+---------------+
| CONCAT( 'A' ) |
+---------------+
| A |
+---------------+
SELECT CONCAT( 'A', 'B' );
+--------------------+
| CONCAT( 'A', 'B' ) |
+--------------------+
| AB |
+--------------------+
SELECT CONCAT( 'A', 'B', 'C' );
+-------------------------+
| CONCAT( 'A', 'B', 'C' ) |
+-------------------------+
| ABC |
+-------------------------+

Diese Anzahl der Argumente dieser Funktion muß größer als 0 sein und kann praktisch beliebig groß sein.

Durch Vergleich von »||« mit »CONCAT« kann man erkennen, daß eine bestimmte Operation grundsätzlich sowohl mit einem Operator als auch mit einer Funktion geschrieben werden kann. Die Entscheidung, in bestimmten Fällen die Operatorschreibweise zu verwenden und in anderen die Funktionsschreibweise ist also etwa willkürlich.

LENGTH

Konsole
SELECT LENGTH( 'abc' );
+-----------------+
| LENGTH( 'abc' ) |
+-----------------+
| 3 |
+-----------------+
SELECT LISTE, LENGTH( LISTE ) FROM LISTE;
+---------------------+-----------------+
| LISTE | LENGTH( LISTE ) |
+---------------------+-----------------+
| Alpha | 5 |
| Alpha, Gamma | 12 |
| Alpha, Gamma, Delta | 19 |
+---------------------+-----------------+
SELECT SUBSTRING( LISTE, 1, LENGTH( LISTE )) FROM LISTE;
+---------------------------------------+
| SUBSTRING( LISTE, 1, LENGTH( LISTE )) |
+---------------------------------------+
| Alpha |
| Alpha, Gamma |
| Alpha, Gamma, Delta |
+---------------------------------------+
SELECT SUBSTRING( LISTE, 1, LENGTH( LISTE )- 1 ) FROM LISTE;
+-------------------------------------------+
| SUBSTRING( LISTE, 1, LENGTH( LISTE )- 1 ) |
+-------------------------------------------+
| Alph |
| Alpha, Gamm |
| Alpha, Gamma, Delt |
+-------------------------------------------+

REPLACE

Konsole
SELECT REPLACE( 'abc', 'b', 'x' );
+----------------------------+
| REPLACE( 'abc', 'b', 'x' ) |
+----------------------------+
| axc |
+----------------------------+

SET sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;

CREATE TABLE LISTE ( LISTE VARCHAR( 32 ));

INSERT INTO LISTE ( LISTE ) VALUES ( 'Alpha' );
INSERT INTO LISTE ( LISTE ) VALUES ( 'Alpha, Gamma' );
INSERT INTO LISTE ( LISTE ) VALUES ( 'Alpha, Gamma, Delta' );

SELECT * FROM LISTE;

+---------------------+
| LISTE |
+---------------------+
| Alpha |
| Alpha, Gamma |
| Alpha, Gamma, Delta |
+---------------------+
SELECT 
LISTE,
LENGTH( LISTE )-
LENGTH( REPLACE( LISTE, ',', '' ))
AS ANZAHL_DER_KOMMAS
FROM LISTE;
+---------------------+-------------------+
| LISTE | ANZAHL_DER_KOMMAS |
+---------------------+-------------------+
| Alpha | 0 |
| Alpha, Gamma | 1 |
| Alpha, Gamma, Delta | 2 |
+---------------------+-------------------+

Textlisten in Feldern sollten vermieden werden!

Obwohl Textlisten in Feldern nicht verwendet werden sollten, kann die Analyse von Textlisten nötig werden, wenn Eingaben oder Daten aus externen Quellen analysiert werden sollen oder Textlisten aus fremden Datenbanken übernommen werden.

UPPER

»string UPPER( string s )« Text in Majuskeln (Großschreibung).

Konsole
SELECT UPPER( 'abcDeF' );
+-------------------+
| UPPER( 'abcDeF' ) |
+-------------------+
| ABCDEF |
+-------------------+

INSTR

Konsole
SELECT INSTR( 'Alpha, Gamma, Delta', ', ' );
+--------------------------------------+
| INSTR( 'Alpha, Gamma, Delta', ', ' ) |
+--------------------------------------+
| 6 |
+--------------------------------------+
SELECT INSTR( 'Alpha, Gamma, Delta', 'Epsilon' );
+-------------------------------------------+
| INSTR( 'Alpha, Gamma, Delta', 'Epsilon' ) |
+-------------------------------------------+
| 0 |
+-------------------------------------------+
SELECT * FROM LISTE;
+---------------------+
| LISTE |
+---------------------+
| Alpha |
| Alpha, Gamma |
| Alpha, Gamma, Delta |
+---------------------+
SELECT LISTE, INSTR( LISTE, ', ' ) FROM LISTE;
+---------------------+----------------------+
| LISTE | INSTR( LISTE, ', ' ) |
+---------------------+----------------------+
| Alpha | 0 |
| Alpha, Gamma | 6 |
| Alpha, Gamma, Delta | 6 |
+---------------------+----------------------+
SELECT LISTE, SUBSTRING( LISTE, INSTR( LISTE, ', ' )) FROM LISTE;
+---------------------+-----------------------------------------+
| LISTE | SUBSTRING( LISTE, INSTR( LISTE, ', ' )) |
+---------------------+-----------------------------------------+
| Alpha | |
| Alpha, Gamma | , Gamma |
| Alpha, Gamma, Delta | , Gamma, Delta |
+---------------------+-----------------------------------------+
SELECT LISTE, SUBSTRING( LISTE, INSTR( LISTE, ', ' ) + LENGTH( ', ' )) FROM LISTE;
+---------------------+----------------------------------------------------------+
| LISTE | SUBSTRING( LISTE, INSTR( LISTE, ', ' ) + LENGTH( ', ' )) |
+---------------------+----------------------------------------------------------+
| Alpha | lpha |
| Alpha, Gamma | Gamma |
| Alpha, Gamma, Delta | Gamma, Delta |
+---------------------+----------------------------------------------------------+

CONCAT_WS

Konsole
SELECT CONCAT_WS( ', ', 'Alpha', 'Gamma', 'Delta' );
+----------------------------------------------+
| CONCAT_WS( ', ', 'Alpha', 'Gamma', 'Delta' ) |
+----------------------------------------------+
| Alpha, Gamma, Delta |
+----------------------------------------------+
SELECT CONCAT_WS( ' - ', 'Alpha', 'Gamma', 'Delta' );
+-----------------------------------------------+
| CONCAT_WS( ' - ', 'Alpha', 'Gamma', 'Delta' ) |
+-----------------------------------------------+
| Alpha - Gamma - Delta |
+-----------------------------------------------+

Übungsaufgabe

Schreiben Sie eine SELECT-Abfrage, welche eine abgeleitete Tabelle ergibt, die eine zusätzliche Spalte mit den ersten drei Buchstaben des Nachnamens in Majuskeln (großen Buchstaben) enthält.

DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE PERSON ( NACHNAME VARCHAR ( 255 ) );
INSERT INTO PERSON ( NACHNAME ) VALUES ( 'Kaufmann' );
INSERT INTO PERSON ( NACHNAME ) VALUES ( 'Merz' );
INSERT INTO PERSON ( NACHNAME ) VALUES ( 'Kunert' );
INSERT INTO PERSON ( NACHNAME ) VALUES ( 'Schmidt' );
INSERT INTO PERSON ( NACHNAME ) VALUES ( 'Rother' );
INSERT INTO PERSON ( NACHNAME ) VALUES ( 'Teuber' );
SELECT * FROM PERSON;
+----------+
| NACHNAME |
+----------+
| Kaufmann |
| Merz |
| Kunert |
| Schmidt |
| Rother |
| Teuber |
+----------+

Übungsaufgabe

Schreiben Sie eine SELECT-Abfrage, welche eine abgeleitete Tabelle ergibt, die eine einzige Spalte enthält, in welcher der Vorname und der Nachname (in dieser Reihenfolge und mit einem Leerzeichen dazwischen) mit Hilfe von »CONCAT« zu einem vollständigen Name zusammengesetzt sind.

DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE PERSON ( NACHNAME VARCHAR ( 255 ), VORNAME VARCHAR ( 255 ) );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Wallner', 'Maximilian' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Akcakaya', 'Christina' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Reisser', 'Michael' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Garnreiter', 'Simon' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Batel', 'Frank' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Heimbeck', 'Petra' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Koss', 'Jannis' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Wolff', 'Sylvia' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Noack', 'Fabian' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Schlegel', 'Bettina' );
SELECT * FROM PERSON;
+------------+------------+
| NACHNAME | VORNAME |
+------------+------------+
| Wallner | Maximilian |
| Akcakaya | Christina |
| Reisser | Michael |
| Garnreiter | Simon |
| Batel | Frank |
| Heimbeck | Petra |
| Koss | Jannis |
| Wolff | Sylvia |
| Noack | Fabian |
| Schlegel | Bettina |
+------------+------------+

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724283 stefan_ram:724283 Weitere Textfunktionen in SQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724283, slrprddef724283, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/weitere_textfunktionen_sql