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

MySQLで数値のみを返す

    次のMySQLクエリは、特定の列に数値を持つ行のみを返します。

    サンプルデータ

    次のようなテーブルを作成するとします。

    DROP TABLE IF EXISTS t1;
    CREATE TABLE t1 (
        c1 varchar(255)
    );
    
    INSERT INTO t1 (c1) VALUES 
        ('0'),
        ('1'),
        ('+1'),
        ('-1'),
        ('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        |
    | 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 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

    結果:

    +--------+
    | c1     |
    +--------+
    | 0      |
    | 1      |
    | +1     |
    | -1     |
    | 00.00  |
    | 73.45  |
    | +73.45 |
    | -73.45 |
    | .246   |
    | -.34e7 |
    | 1.2e+4 |
    | e7     |
    | +e0    |
    +--------+

    ここでは、REGEXPを使用しました 指定したパターンに一致する値のみに一致する関数。

    整数を返す

    整数のみを返したい場合は、パターンをはるかに単純にすることができます。

    SELECT c1
    FROM t1 
    WHERE c1 REGEXP '^[0-9]+$';

    結果:

    +------+
    | c1   |
    +------+
    | 0    |
    | 1    |
    +------+

    数値データが含まれています

    単に含む行を検索したい場合 数値データ(数値以外のデータも含まれている場合でも)では、次のことができます。

    SELECT c1 
    FROM t1 
    WHERE c1 REGEXP '[0-9]+';

    結果:

    +-----------+
    | c1        |
    +-----------+
    | 0         |
    | 1         |
    | +1        |
    | -1        |
    | 00.00     |
    | 73.45     |
    | +73.45    |
    | -73.45    |
    | .246      |
    | -.34e7    |
    | 12.e-3    |
    | 1.2e+4    |
    | 9afc      |
    | e7        |
    | +e0       |
    | 5 Dollars |
    +-----------+

    POSIX文字クラス

    MySQLはPOSIX文字クラスをサポートしています。つまり、[:digit:]を使用できます。 [0-9]の代わりに 正規表現で。

    例:

    SELECT c1
    FROM t1 
    WHERE c1 REGEXP '^[[:digit:]]?$';

    これは、次と同等です:

    SELECT c1
    FROM t1 
    WHERE c1 REGEXP '^[0-9]?$';

    1. ロールバックスクリプトオラクルの自動化

    2. SQLServerでのデータベーススキーマの使用

    3. ルームライブラリはアセットフォルダからデータベースをコピーできますか?

    4. SQLServerで挿入の順序を維持する方法