Wenn Sie eine Spalte in einer Datenbanktabelle haben, die Zeichendaten enthält, aber einige Zeilen auch Zahlen enthalten, können Sie die folgenden SQL-Abfragen verwenden, um nur die Zeilen zurückzugeben, die keine Zahlen im Wert enthalten.
Genau genommen können Zahlen durch Ziffern, Wörter und andere Symbole dargestellt werden, aber für die Zwecke dieses Artikels bedeutet „Zahl“ „Ziffer“. Wir finden also Werte, die keine Ziffern enthalten.
Die von Ihnen verwendete Abfrage hängt von Ihrem DBMS ab.
SQL-Server
In SQL Server können wir eine Abfrage wie diese verwenden:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Hier geben wir alle Zeilen zurück, in denen der ProductName
Spalte enthält keine Ziffern.
Orakel
In Oracle können wir REGEXP_LIKE()
verwenden Funktion:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
In diesem Fall stellen wir ein reguläres Ausdrucksmuster bereit, das den Werten entspricht, die nicht zurückgegeben werden sollen. Die Werte werden tatsächlich abgeglichen, aber wir negieren die Übereinstimmung auch, indem wir NOT
verwenden , was bedeutet, dass alles zurückgegeben wird, was nicht übereinstimmt.
Eine andere Möglichkeit ist die Verwendung von [:digit:]
POSIX-Zeichenklasse:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
In MySQL können wir den NOT REGEX
verwenden Funktion:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Eine andere Möglichkeit, es zu schreiben, ist wie folgt:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Oder wir können den [:digit:]
verwenden POSIX-Zeichenklasse:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
In MariaDB können wir die Implementierung von NOT REGEX
verwenden Funktion:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Eine andere Möglichkeit, es zu schreiben, ist wie folgt:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Oder wir können den [:digit:]
verwenden POSIX-Zeichenklasse:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
So können wir es in Postgres machen:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
In SQLite können wir dies tun:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
In SQLite der REGEXP
Operator ist eine spezielle Syntax für REGEXP()
Benutzerfunktion, sodass wir auch Folgendes tun können:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);