sql >> Database teknologi >  >> RDS >> PostgreSQL

Returner ikke-numeriske værdier fra en PostgreSQL-databasekolonne

Følgende PostgreSQL-eksempler returnerer kun de rækker, der ikke har en numerisk værdi i en given kolonne.

Eksempel på data

Lad os oprette en tabel med eksempeldata:

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;

Tabellen er nu oprettet og indeholder følgende data:

    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

Kolonnen er en varchar(255) kolonne, så den er ikke numerisk. Det kan (og gør) indeholde tal, men disse gemmes som tegndata. Den kan også indeholde vilkårlig tekst (hvilket den gør).

Returner de ikke-numeriske værdier

Vi kan bruge følgende forespørgsel til at returnere de ikke-numeriske værdier fra ovenstående tabel:

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

Resultat:

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

Returner ikke-heltal

Hvis vi kun ønsker at returnere ikke-heltal, kan forespørgslen være meget enklere:

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

Resultat:

    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

Indeholder ikke numeriske data

Hvis vi ønsker at finde rækker, der ikke indeholder numeriske data, kan vi gøre følgende:

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

Resultat:

 c1  
-----
 a
 Ten

I PostgreSQL, !~ er en operator, der skelner mellem store og små bogstaver, og som bruges til at returnere værdier, der ikke matcher det givne regulære udtryk. Brug !~*, hvis der ikke skelnes mellem store og små bogstaver .

Du kan bruge ~ for at returnere alle rækker, der gør matche det regulære udtryk (og ~* for store og små bogstaver).


  1. Oracle PL/SQL-samlinger - Opret indlejrede tabel i databasen

  2. 3 måder at få dagsnavnet fra en dato i SQL Server (T-SQL)

  3. Sådan aktiverer du RPC Out ved hjælp af T-SQL

  4. Hvordan bruger man Room Persistence Library med forududfyldt database?