sql >> Databáze >  >> RDS >> SQLite

2 způsoby, jak vrátit pouze číselné hodnoty ze sloupce databáze SQLite

Následující příklady SQLite vrátí pouze ty řádky, které mají v daném sloupci číselné hodnoty.

Ukázková data

Vytvořme tabulku s ukázkovými daty:

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;

Tabulka byla nyní vytvořena a obsahuje následující údaje:

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 používá dynamický typový systém, kde datový typ hodnoty je spojen s hodnotou samotnou, nikoli se sloupcem (jako u většiny ostatních RDBMS). Když jsem vytvořil tabulku, nespecifikoval jsem datový typ. Hodnoty tedy mohou být libovolného typu.

Typeof() Funkce

Můžeme použít funkci typeof() SQLite k filtrování výsledků pouze na číselné typy (real a integer ):

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

Výsledek:

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

Aby bylo jasno, zde je příklad s výstupem datového typu pro každý řádek:

SELECT 
    c1,
    typeof(c1)
FROM t1;

Výsledek:

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 Funkce

Pokud máme konkrétnější požadavky, můžeme alternativně použít REGEXP předat regulární výraz, který vrátí pouze ty hodnoty, které odpovídají danému vzoru.

Příklad:

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

Výsledek:

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

Vrátit celá čísla

Pokud chceme vrátit pouze celá čísla, můžeme dotaz zjednodušit následovně:

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

Výsledek:

c1
--
0 
1 
1 
-1

To také vrátí celá čísla se znaménkem.

Nebo bychom mohli použít regulární výraz, pokud jsou naše požadavky konkrétnější:

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

Výsledek:

c1
--
0 
1 
1 

Obsahuje číselná data

Pokud chceme najít řádky, které obsahují číselná data (i když obsahují také nečíselná data), můžeme provést následující:

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

Výsledek:

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

  1. Agregovat jeden sloupec v dotazu s mnoha sloupci

  2. MMO hry a návrh databáze

  3. Aktualizace profilu pošty databáze v SQL Server (T-SQL)

  4. Mysql dotaz k dynamickému převodu řádků na sloupce