Получить выходной числовой диапазон из столбца varchar в красных смещениях sql - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь получить числовой диапазон из столбца varchar, но не могу выполнить

Столбец sid_id имеет тип varchar и имеет числовые и буквенно-цифровые значения, такие как

09446115979980
09446115980104
09446115981633
A1X98090900900

ОднакоЯ хочу извлечь только числовые значения в определенном диапазоне

Уже пробовал

sid_id as bigint:

ОШИБКА: XX000: недопустимая цифра, значение 'D', Поз. 14, тип: длинный

sid_id as numeric:

ОШИБКА: XX000: недопустимая цифра, значение «D», поз. 14, тип: десятичное число

sid_id as varchar: вывод пустого значения

The code used is  

with tid as
(
select cast(sid_id as bigint) sid
from mf1.tb1 s                     
where 
right(sid_id,13) similar to '[0-9]{13}'
and left(sid_id,4)= '0944'
)
select tid.sid from tid
where tid.sid between 9445897133440 and 9445907133438
or tid.sid between 9446098650000 and 9446198649999

FYI .. Только последние две строки выдают ошибку, которая необходима в этом коде

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Подход, очень похожий на ваш, с несколькими настройками.Я использовал CTE для создания mf1.tb1 на основе примера ввода, которым вы поделились.

WITH source AS (
SELECT 'A1X98090900900' AS sid_id
UNION ALL
SELECT '09446115981633'
UNION ALL
SELECT '09446115980104'
UNION ALL
SELECT '0944611597998A'
),
tid AS (
SELECT CASE WHEN sid_id similar to '[0-9]*' THEN sid_id::bigint END AS sid
FROM source
WHERE sid IS NOT NULL
)
SELECT sid FROM tid
WHERE sid BETWEEN 9445897133440 and 9445907133438
OR sid BETWEEN 9446098650000 and 9446198649999;
0 голосов
/ 06 июня 2019

Как насчет просто сравнения строк:

select s.sid
from mf1.tb1 s
where s.sid ~ '^[0-9]*$' and
      (s.sid between '09445897133440' and '09445907133438' or
       s.sid between '09446098650000' and '09446198649999'
      )

Интересно, что это не работает с similar to, но работает с ~.

Это не на 100% то же самое, что ваша логика, но, вероятно, она делает то, что вы хотите для ваших данных.

Здесь - это скрипта db <> с использованием Postgres.

...