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