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

Trả về các hàng có chứa giá trị số trong Oracle

Các ví dụ sau chỉ trả về những hàng có giá trị số trong một cột nhất định trong Cơ sở dữ liệu Oracle.

Các ví dụ này sử dụng REGEXP_LIKE hàm để trả về các giá trị phù hợp với mẫu đã chỉ định.

Dữ liệu mẫu

Hãy tạo một bảng mẫu với varchar2 cột và chèn dữ liệu:

CREATE TABLE t1 (
    c1 varchar2(255)
);
INSERT ALL 
INTO t1 (c1) VALUES ('0')
INTO t1 (c1) VALUES ('1')
INTO t1 (c1) VALUES ('+1')
INTO t1 (c1) VALUES ('-1')
INTO t1 (c1) VALUES ('00.00')
INTO t1 (c1) VALUES ('73.45')
INTO t1 (c1) VALUES ('+73.45')
INTO t1 (c1) VALUES ('-73.45')
INTO t1 (c1) VALUES ('.246')
INTO t1 (c1) VALUES ('-.34e7')
INTO t1 (c1) VALUES ('12.e-3')
INTO t1 (c1) VALUES ('1.2e+4')
INTO t1 (c1) VALUES ('a')
INTO t1 (c1) VALUES ('9afc')
INTO t1 (c1) VALUES ('e7')
INTO t1 (c1) VALUES ('+e0')
INTO t1 (c1) VALUES ('Ten')
INTO t1 (c1) VALUES ('5 Dollars')
SELECT 1 FROM DUAL;

Hãy chọn tất cả dữ liệu từ bảng:

SELECT * FROM t1;

Kết quả:

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 varchar2 , 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 tất cả các giá trị dạng số

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

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

Kết quả:

0
1
+1
-1
00.00
73.45
+73.45
-73.45
.246
-.34e7
1.2e+4

Trả về số nguyên

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

SELECT c1
FROM t1 
WHERE REGEXP_LIKE(c1, '^[0-9]+$');

Kết quả:

0
1

Chứa dữ liệu số

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

SELECT c1 
FROM t1 
WHERE REGEXP_LIKE(c1, '[0-9]+');

Kết quả:

0
1
+1
-1
00.00
73.45
+73.45
-73.45
.246
-.34e7
12.e-3
1.2e+4
9afc
e7
+e0
5 Dollars

Ngoài ra, chúng ta có thể sử dụng các lớp POSIX để có được kết quả tương tự:

SELECT c1 
FROM t1 
WHERE REGEXP_LIKE(c1, '[[:digit:]]');

Kết quả:

0
1
+1
-1
00.00
73.45
+73.45
-73.45
.246
-.34e7
12.e-3
1.2e+4
9afc
e7
+e0
5 Dollars

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng dung lượng cao từ crfclust.bdb

  2. Hàm SYS_EXTRACT_UTC () trong Oracle

  3. Làm thế nào bạn có thể biết nếu một giá trị không phải là số trong Oracle?

  4. Oracle:cách trừ hai ngày và lấy kết quả theo phút

  5. Giải thưởng bình chọn dành cho nhà phát triển cơ sở dữ liệu Oracle