Не работает условие с преобразованием в oracle TO_NUMBER(substr(column,1,3)) between 900 and 999

Рейтинг: 0Ответов: 2Опубликовано: 26.06.2023

Изначально столбец column имеет тип данных varchar(19) там содержаться разные номера (1000094384, 9008564566, 999765443, 6786543 итп). Мне нужно выбрать номера начинающиеся от 900 до 999 (900,901,902...998,999). Преобразую в number TO_NUMBER(substr(column,1,3)) between 900 and 999 но пишет ошибку неверное число, пробовал через >= <= тоже самое

Ответы

▲ 1

Пожалуйста, попробуйте следующее решение.

Оно использует удобную Oracle функцию regexp_like(). Этот метод не требует преобразования данных.

dbfiddle

SQL

CREATE TABLE tbl (ID int, col VARCHAR2(19) NOT NULL);

INSERT INTO tbl (ID, col) 
WITH rs AS ( 
    SELECT 1, '1000094384'   FROM dual UNION ALL 
    SELECT 2, '999765443'    FROM dual UNION ALL 
    SELECT 3, '6786543'      FROM dual UNION ALL 
    SELECT 4, '9008564566'   FROM dual UNION ALL 
    SELECT 5, 'Junk'         FROM dual 
)
SELECT * FROM rs;

SELECT * FROM tbl
WHERE regexp_like(col, '^9[0-9][0-9].?');

Результат

ID COL
2 999765443
4 9008564566
▲ 1

to_number умеет возвращать число в случае ошибки, чтобы не генерировать ошибку для буквенных данных:

TO_NUMBER(substr(column,1,3) default 0 on conversion error) between 900 and 999