sql >> Databasteknik >  >> RDS >> PostgreSQL

Returnera icke-numeriska värden från en PostgreSQL-databaskolumn

Följande PostgreSQL-exempel returnerar endast de rader som inte har ett numeriskt värde i en given kolumn.

Exempeldata

Låt oss skapa en tabell med exempeldata:

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 har nu skapats och innehåller följande 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

Kolumnen är en varchar(255) kolumn, så den är inte numerisk. Det kan (och innehåller) siffror men dessa lagras som teckendata. Den kan också innehålla godtycklig text (vilket den gör).

Returnera de icke-numeriska värdena

Vi kan använda följande fråga för att returnera de icke-numeriska värdena från tabellen ovan:

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

Returnera icke-heltal

Om vi ​​bara vill returnera icke-heltal kan frågan vara mycket enklare:

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

Innehåller inte numerisk data

Om vi ​​vill hitta rader som inte innehåller numerisk data kan vi göra följande:

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

Resultat:

 c1  
-----
 a
 Ten

I PostgreSQL, !~ är en skiftlägeskänslig operator som används för att returnera värden som inte matchar det givna reguljära uttrycket. För skiftlägesokänsliga matchningar, använd !~* .

Du kan använda ~ för att returnera alla rader som gör matcha det reguljära uttrycket (och ~* för skiftlägesokänsliga matchningar).


  1. Topp 5 MySQL GUI-verktyg (gratis och betalda)

  2. operation inte tillåten när objektet är stängt när mer avancerad fråga körs

  3. SQL inte lika med () Operator för nybörjare

  4. psql:servern stängde anslutningen oväntat