Не работает условие с преобразованием в oracle TO_NUMBER(substr(column,1,3)) between 900 and 999
Изначально столбец 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 но пишет ошибку неверное число, пробовал через >= <= тоже самое
Ответы (2 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Пожалуйста, попробуйте следующее решение.
Оно использует удобную Oracle функцию regexp_like(). Этот метод не требует преобразования данных.
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 |
Автор решения: ESkri
→ Ссылка
to_number умеет возвращать число в случае ошибки, чтобы не генерировать ошибку для буквенных данных:
TO_NUMBER(substr(column,1,3) default 0 on conversion error) between 900 and 999