sql >> Database >  >> RDS >> PostgreSQL

Retourneer niet-numerieke waarden uit een PostgreSQL-databasekolom

De volgende PostgreSQL-voorbeelden retourneren alleen die rijen die geen numerieke waarde in een bepaalde kolom hebben.

Voorbeeldgegevens

Laten we een tabel maken met voorbeeldgegevens:

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;

De tabel is nu aangemaakt en bevat de volgende gegevens:

    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

De kolom is een varchar(255) kolom, dus het is niet numeriek. Het kan (en zal) cijfers bevatten, maar deze worden opgeslagen als tekengegevens. Het kan ook willekeurige tekst bevatten (wat het ook doet).

Retourneer de niet-numerieke waarden

We kunnen de volgende query gebruiken om de niet-numerieke waarden uit de bovenstaande tabel te retourneren:

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

Resultaat:

    c1     
-----------
 12.e-3
 a
 9afc
 e7
 +e0
 Ten
 5 Dollars

Niet-gehele getallen retourneren

Als we alleen niet-gehele getallen willen retourneren, kan de zoekopdracht een stuk eenvoudiger zijn:

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

Resultaat:

    c1     
-----------
 +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

Bevat geen numerieke gegevens

Als we rijen willen vinden die geen numerieke gegevens bevatten, kunnen we het volgende doen:

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

Resultaat:

 c1  
-----
 a
 Ten

In PostgreSQL, !~ is een hoofdlettergevoelige operator die wordt gebruikt voor het retourneren van waarden die niet overeenkomen met de opgegeven reguliere expressie. Gebruik voor hoofdletterongevoelige overeenkomsten !~* .

U kunt ~ . gebruiken om alle rijen terug te geven die doen overeenkomen met de reguliere expressie (en ~* voor niet-hoofdlettergevoelige overeenkomsten).


  1. SQL Server Een trigger om aan meerdere rij-invoegingen te werken

  2. Problemen oplossen met SQL Server Always On-beschikbaarheidsgroepen

  3. Hoe PLAFOND() werkt in MariaDB

  4. Django-databaselaag gebruiken buiten Django?