PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zwracanie wartości nienumerycznych z kolumny bazy danych PostgreSQL

Poniższe przykłady PostgreSQL zwracają tylko te wiersze, które nie mają wartości liczbowej w danej kolumnie.

Przykładowe dane

Stwórzmy tabelę z przykładowymi danymi:

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;

Tabela została utworzona i zawiera następujące dane:

    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

Kolumna to varchar(255) kolumna, więc nie jest liczbowa. Może (i zawiera) liczby, ale są one przechowywane jako dane znakowe. Może również zawierać dowolny tekst (co robi).

Zwróć wartości nieliczbowe

Możemy użyć następującego zapytania, aby zwrócić wartości nienumeryczne z powyższej tabeli:

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

Wynik:

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

Zwróć liczby niebędące liczbami całkowitymi

Jeśli chcemy zwrócić tylko liczby niecałkowite, zapytanie może być dużo prostsze:

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

Wynik:

    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

Nie zawiera danych liczbowych

Jeśli chcemy znaleźć wiersze, które nie zawierają danych liczbowych, możemy wykonać następujące czynności:

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

Wynik:

 c1  
-----
 a
 Ten

W PostgreSQL !~ jest operatorem rozróżniającym wielkość liter, który jest używany do zwracania wartości, które nie pasują do podanego wyrażenia regularnego. W przypadku dopasowań bez rozróżniania wielkości liter użyj !~* .

Możesz użyć ~ aby zwrócić wszystkie wiersze, które robi dopasuj wyrażenie regularne (i ~* dla dopasowań bez rozróżniania wielkości liter).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego Postgres nie korzysta z indeksu?

  2. Nowe dane nie są zachowywane w kolumnie tablicy Rails w Postgresie

  3. Błąd podczas mapowania tablic postgres w Spring JPA

  4. 4 sposoby na wybranie zduplikowanych wierszy w PostgreSQL

  5. Wkładka wielorzędowa z obietnicą pg