SQLite
 sql >> Datenbank >  >> RDS >> SQLite

2 Möglichkeiten, nur die numerischen Werte aus einer SQLite-Datenbankspalte zurückzugeben

Die folgenden SQLite-Beispiele geben nur die Zeilen zurück, die numerische Werte in einer bestimmten Spalte enthalten.

Beispieldaten

Lassen Sie uns eine Tabelle mit Beispieldaten erstellen:

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;

Die Tabelle ist nun erstellt und enthält folgende Daten:

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 verwendet ein dynamisches Typsystem, bei dem der Datentyp eines Werts mit dem Wert selbst verknüpft ist, nicht mit der Spalte (wie bei den meisten anderen RDBMS). Als ich die Tabelle erstellt habe, habe ich keinen Datentyp angegeben. Daher können die Werte von jedem Typ sein.

Der Typeof() Funktion

Wir können die typeof()-Funktion von SQLite verwenden, um die Ergebnisse auf nur numerische Typen (real) zu filtern und integer ):

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

Ergebnis:

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

Nur um das klarzustellen, hier ist ein Beispiel, das den Datentyp für jede Zeile ausgibt:

SELECT 
    c1,
    typeof(c1)
FROM t1;

Ergebnis:

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      

Der REGEXP Funktion

Wenn wir spezifischere Anforderungen haben, können wir alternativ REGEXP verwenden um einen regulären Ausdruck zu übergeben, um nur die Werte zurückzugeben, die dem gegebenen Muster entsprechen.

Beispiel:

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

Ergebnis:

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

Integer zurückgeben

Wenn wir nur Ganzzahlen zurückgeben wollen, können wir die Abfrage wie folgt vereinfachen:

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

Ergebnis:

c1
--
0 
1 
1 
-1

Dies gibt auch vorzeichenbehaftete Ganzzahlen zurück.

Oder wir könnten einen regulären Ausdruck verwenden, wenn unsere Anforderungen spezifischer sind:

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

Ergebnis:

c1
--
0 
1 
1 

Enthält numerische Daten

Wenn wir Zeilen finden wollen, die numerische Daten enthalten (auch wenn sie auch nicht-numerische Daten enthalten), können wir Folgendes tun:

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

Ergebnis:

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