Oracle
 sql >> база данни >  >> RDS >> Oracle

Връщане на редове, които съдържат числови стойности в Oracle

Следващите примери връщат само онези редове, които имат числови стойности в дадена колона в Oracle Database.

Тези примери използват REGEXP_LIKE функция за връщане на стойности, които съответстват на посочения модел.

Примерни данни

Нека създадем примерна таблица с varchar2 колона и вмъкнете данни:

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;

Нека изберем всички данни от таблицата:

SELECT * FROM t1;

Резултат:

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

Колоната е varchar2 колона, така че не е числова. Може (и съдържа) числа, но те се съхраняват като данни за знаци. Може също да съдържа произволен текст (което прави).

Връщане на всички числови стойности

Можем да използваме следната заявка, за да върнем всички числови стойности от горната таблица:

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

Резултат:

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

Връщане на цели числа

Ако искаме да върнем само цели числа, заявката може да бъде много по-проста:

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

Резултат:

0
1

Съдържа числови данни

Ако искаме да намерим редове, които съдържат числови данни (дори и те да съдържат нечислови данни), можем да направим следното:

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

Резултат:

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

Алтернативно можем да използваме POSIX класове, за да получим същия резултат:

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

Резултат:

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. Java:Четене на Blob от Oracle

  2. Как да използвате rownum

  3. Активиране на виртуализация в BIOS в лаптоп или настолен компютър за Virtualbox VM

  4. Определяне на датите на Великден за всяка година в Oracle PLSQL

  5. SQL (ORACLE):ORDER BY и LIMIT