データベーステーブルに文字データを含む列があり、一部の行にも数値が含まれている場合は、次のSQLクエリを使用して、値に数値が含まれていない行のみを返すことができます。
厳密に言えば、数字は数字、単語、その他の記号で表すことができますが、この記事では、「数字」は「数字」を意味します。そのため、数字を含まない値を見つけています。
使用するクエリは、DBMSによって異なります。
SQL Server
SQL Serverでは、次のようなクエリを使用できます。
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
ここでは、ProductName
が含まれるすべての行を返します。 列に数字は含まれていません。
Oracle
Oracleでは、REGEXP_LIKE()
を使用できます。 機能:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
この場合、返されたくない値に一致する正規表現パターンを提供します。値は実際には一致していますが、NOT
を使用して一致を否定します 、つまり、一致しないものはすべて返されます。
これを行う別の方法は、[:digit:]
を使用することです。 POSIX文字クラス:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
MySQLでは、NOT REGEX
を使用できます 機能:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
別の書き方は次のようになります:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
または、[:digit:]
を使用することもできます POSIX文字クラス:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
MariaDBでは、 NOT REGEX
の実装を使用できます。 機能:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
別の書き方は次のようになります:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
または、[:digit:]
を使用することもできます POSIX文字クラス:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Postgresでそれを行う方法は次のとおりです:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
SQLiteでは、これを行うことができます:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
SQLiteでは、REGEXP
演算子は、REGEXP()
の特別な構文です。 ユーザー関数なので、次のこともできます:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);