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'
AND typeof(c1) <> 'integer';

Резултат:

c1       
---------
Ten      
5 Dollars

Ето още един пример, който извежда типа данни за всеки ред:

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      

Това ни показва, че само последните два реда съдържат нечислови данни (те съдържат text данни).

REGEXP Функция

Друга възможност е да използвате REGEXP да предаде регулярен израз, за ​​да върне само тези стойности, които съответстват на дадения шаблон.

Пример:

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

Резултат:

c1       
---------
Ten      
5 Dollars

Връщане на нецели числа

Ако искаме да върнем само нецели числа, можем да направим следното:

SELECT c1
FROM t1
WHERE typeof(c1) <> 'integer';

Резултат:

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

Това също изключва цели числа със знак.

Или можем да използваме регулярен израз, ако изискванията ни са по-конкретни:

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

Резултат:

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

Не съдържа цифрови данни

Ако искаме да намерим редове, които не съдържат никакви цифрови данни, можем да направим следното:

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

Резултат:

c1 
---
Ten

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. android.database.sqlite.SQLiteException:близо до s:синтактична грешка (код 1):,

  2. 5 начина да стартирате SQL скрипт от файл в SQLite

  3. Как да форматирате дата и час в SQLite

  4. Извиква ли се някога методът onUpgrade?

  5. SQLite Създаване на изглед