PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trả về các giá trị không phải dạng số từ cột cơ sở dữ liệu PostgreSQL

Các ví dụ PostgreSQL sau đây chỉ trả về những hàng không có giá trị số trong một cột nhất định.

Dữ liệu mẫu

Hãy tạo một bảng với dữ liệu mẫu:

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;

Bảng hiện đã được tạo và chứa dữ liệu sau:

    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

Cột là một varchar(255) , vì vậy nó không phải là số. Nó có thể (và không) chứa số nhưng chúng được lưu trữ dưới dạng dữ liệu ký tự. Nó cũng có thể chứa văn bản tùy ý (mà nó có).

Trả lại các giá trị không phải dạng số

Chúng ta có thể sử dụng truy vấn sau để trả về các giá trị không phải số từ bảng trên:

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

Kết quả:

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

Trả về số không phải là số nguyên

Nếu chúng ta chỉ muốn trả về các số không phải là số nguyên, thì truy vấn có thể đơn giản hơn rất nhiều:

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

Kết quả:

    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

Không chứa dữ liệu số

Nếu chúng tôi muốn tìm các hàng không chứa dữ liệu số, chúng tôi có thể làm như sau:

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

Kết quả:

 c1  
-----
 a
 Ten

Trong PostgreSQL, !~ là một toán tử phân biệt chữ hoa chữ thường được sử dụng để trả về các giá trị không khớp với biểu thức chính quy đã cho. Đối với các kết quả khớp không phân biệt chữ hoa chữ thường, hãy sử dụng !~* .

Bạn có thể sử dụng ~ để trả về tất cả các hàng do khớp với biểu thức chính quy (và ~* đối với các kết quả phù hợp không phân biệt chữ hoa chữ thường).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL tạo bảng nếu không tồn tại

  2. Hàm GREATEST () trong PostgreSQL

  3. Django cố định không thành công, cho biết DatabaseError:giá trị quá dài đối với ký tự loại thay đổi (50)

  4. Làm thế nào để tạo một chuỗi phân vùng PostgreSQL?

  5. SQL Nhận tất cả các bản ghi cũ hơn 30 ngày