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

SQLiteデータベース列から数値だけを返す2つの方法

    次のSQLiteの例では、特定の列に数値がある行のみが返されます。

    サンプルデータ

    サンプルデータを使用してテーブルを作成しましょう:

    DROP TABLE IF EXISTS t1;
    CREATE TABLE t1 (
        c1
    );
    
    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),
        ('Ten'),
        ('5 Dollars');
    
    SELECT * FROM t1;

    これでテーブルが作成され、次のデータが含まれています。

    c1        
    ----------
    0         
    1         
    1         
    -1        
    0.0       
    73.45     
    73.45     
    -73.45    
    0.246     
    -3400000.0
    0.012     
    12000.0   
    Ten       
    5 Dollars 

    SQLiteは動的型システムを使用します。このシステムでは、値のデータ型が列ではなく値自体に関連付けられます(他のほとんどのRDBMSと同様)。テーブルを作成したとき、データ型を指定しませんでした。したがって、値は任意のタイプにすることができます。

    Typeof() 機能

    SQLiteのtypeof()関数を使用して、結果を数値タイプ(real)のみにフィルタリングできます。 およびinteger ):

    SELECT c1
    FROM t1
    WHERE typeof(c1) = 'real'
    OR typeof(c1) = 'integer';

    結果:

    c1        
    ----------
    0         
    1         
    1         
    -1        
    0.0       
    73.45     
    73.45     
    -73.45    
    0.246     
    -3400000.0
    0.012     
    12000.0   

    明確にするために、各行のデータ型を出力する例を次に示します。

    SELECT 
        c1,
        typeof(c1)
    FROM t1;

    結果:

    c1          typeof(c1)
    ----------  ----------
    0           integer   
    1           integer   
    1           integer   
    -1          integer   
    0.0         real      
    73.45       real      
    73.45       real      
    -73.45      real      
    0.246       real      
    -3400000.0  real      
    0.012       real      
    12000.0     real      
    Ten         text      
    5 Dollars   text      

    REGEXP 機能

    より具体的な要件がある場合は、代わりにREGEXPを使用できます。 正規表現を渡して、指定されたパターンに一致する値だけを返すようにします。

    例:

    SELECT c1
    FROM t1 
    WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

    結果:

    c1        
    ----------
    0         
    1         
    1         
    -1        
    0.0       
    73.45     
    73.45     
    -73.45    
    0.246     
    -3400000.0
    0.012     
    12000.0   

    整数を返す

    整数のみを返したい場合は、次のようにクエリを簡略化できます。

    SELECT c1
    FROM t1
    WHERE typeof(c1) = 'integer';

    結果:

    c1
    --
    0 
    1 
    1 
    -1

    これは符号付き整数も返します。

    または、要件がより具体的である場合は、正規表現を使用できます。

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

    結果:

    c1
    --
    0 
    1 
    1 

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

    数値データを含む行を検索する場合(数値以外のデータも含まれている場合でも)、次のように実行できます。

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

    結果:

    c1        
    ----------
    0         
    1         
    1         
    -1        
    0.0       
    73.45     
    73.45     
    -73.45    
    0.246     
    -3400000.0
    0.012     
    12000.0   
    5 Dollars 

    1. MySQLトリガーからのPHPスクリプトの呼び出し

    2. 大きなテーブルでのSQLServerクエリのパフォーマンスを向上させる

    3. 列のMySql合計要素

    4. JSON_VALID()–MySQLで有効なJSONをテストする