sql >> データベース >  >> RDS >> Mysql

MySQLの列で数値以外の値を見つける方法

    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  |
    +------+

    1. INSERT INTO...RETURNING-あいまいな列参照

    2. SSISのスクリプトタスクから実行すると、Oracleプロシージャが結果を返さない

    3. Oracleデータベースでパラメータを使用してPL/SQLストアドプロシージャを作成する方法

    4. ORA-30926:表をマージするときに、ソース表で安定した行のセットを取得できません