SQLite
 sql >> база данни >  >> RDS >> SQLite

2 начина за връщане само на числовите стойности от колона на базата данни на SQLite

Следните примери на 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() Функция

Можем да използваме функцията typeof() на SQLite, за да филтрираме резултатите само до числови типове (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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Променя ли се идентификаторът на ресурса всеки път, когато стартира приложение

  2. Бърза публикация за SQLite UPSERT и новата клауза RETURNING.

  3. 2 начина за връщане само на числовите стойности от колона на базата данни на SQLite

  4. Android – Курсор onMapReady (Маркери)

  5. Как да синхронизирам с локална база данни и да анализирам?