Følgende SQLite-eksempler returnerer kun de rækker, der har numeriske værdier i en given kolonne.
Eksempel på data
Lad os oprette en tabel med eksempeldata:
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;
Tabellen er nu oprettet og indeholder følgende data:
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 bruger et dynamisk type system, hvor datatypen for en værdi er forbundet med selve værdien, ikke kolonnen (som med de fleste andre RDBMS'er). Da jeg oprettede tabellen, specificerede jeg ikke en datatype. Derfor kan værdierne være af enhver type.
Typeof()
Funktion
Vi kan bruge SQLites typeof() funktion til at filtrere resultaterne til kun numeriske typer (real
og integer
):
SELECT c1
FROM t1
WHERE typeof(c1) = 'real'
OR typeof(c1) = 'integer';
Resultat:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0
Bare for at være klar, her er et eksempel, der udsender datatypen for hver række:
SELECT
c1,
typeof(c1)
FROM t1;
Resultat:
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
Funktion
Hvis vi har mere specifikke krav, kan vi alternativt bruge REGEXP
at sende et regulært udtryk for at returnere kun de værdier, der matcher det givne mønster.
Eksempel:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Resultat:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0
Returner heltal
Hvis vi kun ønsker at returnere heltal, kan vi forenkle forespørgslen på følgende måde:
SELECT c1
FROM t1
WHERE typeof(c1) = 'integer';
Resultat:
c1 -- 0 1 1 -1
Dette returnerer også signerede heltal.
Eller vi kunne bruge et regulært udtryk, hvis vores krav er mere specifikke:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[0-9]+$';
Resultat:
c1 -- 0 1 1
Indeholder numeriske data
Hvis vi ønsker at finde rækker, der indeholder numeriske data (selvom de også indeholder ikke-numeriske data), kan vi gøre følgende:
SELECT c1
FROM t1
WHERE c1 REGEXP '[0-9]+';
Resultat:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0 5 Dollars