PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Gibt nur die numerischen Werte aus einer PostgreSQL-Datenbankspalte zurück

Die folgenden PostgreSQL-Beispiele geben nur die Zeilen zurück, die numerische Werte in einer bestimmten Spalte enthalten.

Beispieldaten

Lassen Sie uns eine Tabelle mit Beispieldaten erstellen:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1 varchar(255)
);

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'),
    ('a'),
    ('9afc'),
    ('e7'),
    ('+e0'),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1;

Die Tabelle ist nun erstellt und enthält folgende Daten:

    c1     
-----------
 0
 1
 +1
 -1
 00.00
 73.45
 +73.45
 -73.45
 .246
 -.34e7
 12.e-3
 1.2e+4
 a
 9afc
 e7
 +e0
 Ten
 5 Dollars

Die Spalte ist ein varchar(255) Spalte, also nicht numerisch. Es kann (und tut) Zahlen enthalten, aber diese werden als Zeichendaten gespeichert. Es kann auch beliebigen Text enthalten (was es auch tut).

Alle numerischen Werte zurückgeben

Wir können die folgende Abfrage verwenden, um alle numerischen Werte aus der obigen Tabelle zurückzugeben:

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

Ergebnis:

   c1   
--------
 0
 1
 +1
 -1
 00.00
 73.45
 +73.45
 -73.45
 .246
 -.34e7
 1.2e+4

Integer zurückgeben

Wenn wir nur ganze Zahlen zurückgeben wollen, kann die Abfrage viel einfacher sein:

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

Ergebnis:

 c1 
----
 0
 1

Enthält numerische Daten

Wenn wir Zeilen finden wollen, die numerische Daten enthalten (auch wenn sie auch nicht-numerische Daten enthalten), können wir Folgendes tun:

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

Ergebnis:

    c1     
-----------
 0
 1
 +1
 -1
 00.00
 73.45
 +73.45
 -73.45
 .246
 -.34e7
 12.e-3
 1.2e+4
 9afc
 e7
 +e0
 5 Dollars

In PostgreSQL ~ ist ein Operator, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, um den angegebenen regulären Ausdruck abzugleichen. Verwenden Sie für Übereinstimmungen ohne Berücksichtigung der Groß-/Kleinschreibung ~* .

Sie können !~ verwenden um alle Zeilen zurückzugeben, die nicht mit dem regulären Ausdruck übereinstimmen (und !~* für Übereinstimmungen ohne Berücksichtigung der Groß-/Kleinschreibung).

POSIX-Zeichenklassen

Postgres unterstützt auch POSIX-Zeichenklassen. Wir können also [:digit:] verwenden statt [0-9] wenn es uns lieber ist.

Beispiel:

SELECT c1
FROM t1 
WHERE c1 ~ '^[[:digit:]]?$';

Ergebnis:

 c1 
----
 0
 1