MySQLでは、次のようなクエリを実行して、列から数値以外のデータを返すことができます。
これは、数値データを含む列を見つけたが、それがvarchar
として設定されている場合に役立ちます。 またはchar
桁。このクエリを使用して、列に挿入された可能性のある数値以外の値を見つけることができます。その後、数値に変換してから列タイプを変更するなど、任意の方法で処理できます。
サンプルデータ
次のようなテーブルを作成するとします。
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
c1 varchar(255)
);
INSERT INTO t1 (c1) VALUES
('0'),
('1'),
('+1'),
('-1'),
('.5'),
('00.00'),
('73.45'),
('+73.45'),
('-73.45'),
('.246'),
('-.34e7'),
('12.e-3'),
('1.2e+4'),
('a'),
('9afc'),
('e7'),
('+e0'),
('Ten'),
('5 Dollars');
SELECT * FROM t1;
テーブルが作成され、次の行が含まれています:
+-----------+ | c1 | +-----------+ | 0 | | 1 | | +1 | | -1 | | .5 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
列はvarchar(255)
です 列なので、数値ではありません。数字を含めることができます(実際に含めることができます)が、これらは文字データとして保存されます。任意のテキストを含めることもできます(これは含まれます)。
数値以外の値をすべて返す
次のクエリを使用して、上記の表から数値以外の値を返すことができます。
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
結果:
+-----------+ | c1 | +-----------+ | 12.e-3 | | a | | 9afc | | Ten | | 5 Dollars | +-----------+
非整数を返す
非整数のみを返したい場合は、クエリをはるかに簡単にすることができます:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[0-9]+$';
結果:
+-----------+ | c1 | +-----------+ | +1 | | -1 | | .5 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
数値データは含まれていません
数値データを含まない行を検索するだけの場合は、次のように実行できます。
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '[0-9]+';
結果:
+------+ | c1 | +------+ | a | | Ten | +------+