SQLite
 sql >> Baza danych >  >> RDS >> SQLite

2 sposoby na zwrócenie tylko wartości liczbowych z kolumny bazy danych SQLite

Poniższe przykłady SQLite zwracają tylko te wiersze, które mają wartości liczbowe w danej kolumnie.

Przykładowe dane

Stwórzmy tabelę z przykładowymi danymi:

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;

Tabela została utworzona i zawiera następujące dane:

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 używa dynamicznego systemu typów, w którym typ danych wartości jest powiązany z samą wartością, a nie z kolumną (jak w przypadku większości innych RDBMS). Kiedy tworzyłem tabelę, nie określałem typu danych. Dlatego wartości mogą być dowolnego typu.

Typeof() Funkcja

Możemy użyć funkcji typeof() SQLite do filtrowania wyników tylko do typów numerycznych (real i integer ):

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

Wynik:

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

Dla jasności, oto przykład, który wyświetla typ danych dla każdego wiersza:

SELECT 
    c1,
    typeof(c1)
FROM t1;

Wynik:

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 Funkcja

Jeśli mamy bardziej szczegółowe wymagania, możemy alternatywnie użyć REGEXP przekazać wyrażenie regularne, aby zwrócić tylko te wartości, które pasują do podanego wzorca.

Przykład:

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

Wynik:

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

Zwracane liczby całkowite

Jeśli chcemy zwrócić tylko liczby całkowite, możemy uprościć zapytanie w następujący sposób:

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

Wynik:

c1
--
0 
1 
1 
-1

Zwraca to również liczby całkowite ze znakiem.

Lub możemy użyć wyrażenia regularnego, jeśli nasze wymagania są bardziej szczegółowe:

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

Wynik:

c1
--
0 
1 
1 

Zawiera dane liczbowe

Jeśli chcemy znaleźć wiersze zawierające dane liczbowe (nawet jeśli zawierają również dane nieliczbowe), możemy wykonać następujące czynności:

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sklonuj bazę danych SQLite

  2. PRAGMA table_list w SQLite

  3. SQLite CROSS JOIN z praktycznym przykładem

  4. Radzenie sobie z konfliktami kluczy podstawowych podczas wstawiania danych do SQLite

  5. SQLite wprowadza funkcję UNIXEPOCH()