powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с запросом
4 сообщений из 4, страница 1 из 1
Помощь с запросом
    #39951354
User904
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите, пожалуйста с запросом.

В столбце num содержатся числовые значения (положительные, отрицательные, дробные).
Требуется оставить первые 2 цифры, а остальные заменить на 0, если число 5-значное и меньше (53046 -> 53000)
первые 3 цифры, если число от 6-значного до 19-значного (839593954.87 -> 839000000.00)
и первые 8 цифр, если число 20-значное и больше (-435763857636583756478356 -> -435763850000000000000000)

У меня получилось написать такой запрос на Oracle с помощью regexp_relace, которая принимает 6 параметров и где я смог указать с какого символа начать замену. Но мне нужно сделать это на Hive/Impala, где принимаются только 3 первых параметра. Какие функции мне нужно использовать дополнительно?

SELECT case
when data.num BETWEEN 1 AND 99999
then regexp_replace (data.num, '1|2|3|4|5|6|7|8|9' , '0', '3', '0', 'c')
when data.num BETWEEN 100000 AND 9999999999999999999
then regexp_replace (data.num, '1|2|3|4|5|6|7|8|9' , '0', '4', '0', 'c')
when data.num > 9999999999999999999
then regexp_replace (data.num, '1|2|3|4|5|6|7|8|9' , '0', '9', '0', 'c')
when data.num BETWEEN -99999 AND 0
then regexp_replace (data.num, '1|2|3|4|5|6|7|8|9' , '0', '3', '0', 'c')
when data.num BETWEEN -9999999999999999999 AND -100000
then regexp_replace (data.num, '1|2|3|4|5|6|7|8|9' , '0', '4', '0', 'c')
when data.num < -9999999999999999999
then regexp_replace (data.num, '1|2|3|4|5|6|7|8|9' , '0', '9', '0', 'c')
FROM data
WHERE data.num IS NOT NULL
...
Рейтинг: 0 / 0
Помощь с запросом
    #39951363
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Горе от ума.


1.

FROM data

Нет у нас ваших данных.

2. Проще подходите. Самое примитивное - самое действенное. Как добить нулями, сходу не сообразил, коллеги подскажут.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with t (N) as (
select '1990' from dual union all
select '1234' from dual union all
select '2003941' from dual union all
select '29385764635635354' from dual union all
select '958567847476586629385764635635354' from dual union all
select '19404850847508475456O96598695869586' from dual
)

select n,
       case
         when length (n) < 6 then
            substr(n, 1, 2) || '_case1'
         when length (n) < 19 then 
            substr(n, 1, 3) || '_case2'
         else
            substr(n, 1, 8) || '_case3'
       end shit
from t
...
Рейтинг: 0 / 0
Помощь с запросом
    #39951374
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User904
числовые значения
Допиливай
Код: plsql
1.
2.
3.
select n,
       trunc(n, case when p < 6 then 2 - p when p < 20 then 5 - p else 8 - p end) x
  from (select n, trunc(log(10, n) + 1) p from t)
...
Рейтинг: 0 / 0
Помощь с запросом
    #39951376
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]