powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Число хранится как текст. Как написать выборку с использованием between?
25 сообщений из 89, страница 3 из 4
Число хранится как текст. Как написать выборку с использованием between?
    #39537540
PL SQL Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxраз сказал что ошибка, тем более грубая, что корона слетит, если обьяснит в чем грубость
andrey_anonymousподойти к тимлиду и попросить детальных пояснений.
И он таки пояснил. Сказал, что неявное преобразование данных приводит к неоправданному повышению нагрузки на сервер БД и кинул мне ссылку "на почитать" (см. выше).
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537541
PL SQL Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, на будущее - в столбце RECEIPT хранятся только строки, составленные из символов:
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'

Никаких других символов там нет, не было и не будет.
Прошу рассматривать эту задачу именно в рамках этих условий.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537545
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL SQL Новичокнеявное преобразование данных приводит к неоправданному повышению нагрузки на сервер БДНеявное преобразование не дороже явного.
Он неадекват. Экономит на спичках, когда дом горит.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537554
PL SQL Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicНеявное преобразование не дороже явного.Спасибо, именно это я также хотел уточнить.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537556
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что автор видит там только числа, не говорит о том, что в дальнейшем это не станет действительно строками.
Не знаю, что там в голове у архитектора, но, возможно, закладывались на применение каких-нибудь префиксов или постфиксов.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537558
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537563
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Что за тимлид такой, что сам и сразу не поясняет своих мыслей?
И почему бы сразу у него не попросить пояснений?
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537564
PL SQL Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790автор видит там только числа, не говорит о том, что в дальнейшем это не станет действительно строкамину вот опять ...
но даже если вдруг там появятся "нечисловые" строки (а этого не может быть, иначе нарушится бизнес-логика),
то у меня на этот случай предусмотрен блок Exception, и в этом случае процедура выдаст return_code > 0, что соответствует ошибке.
Успокойтесь уже с этими "нечисловыми" строками.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537565
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ElicОн неадекват. Экономит на спичках, когда дом горит.+1
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537566
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
PL SQL Новичокно даже если вдруг там появятся "нечисловые" строкикакого хрена тогда хранить числа как строки?
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537567
PL SQL Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderЧто за тимлид такой, что сам и сразу не поясняет своих мыслей?
И почему бы сразу у него не попросить пояснений?Ну я и спросил, почти что сразу и получил пояснения, которые, однако, меня не удовлетворили, что и побудило меня обратиться на форум профессионалов-ораклоидов.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537569
PL SQL Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderкакого хрена тогда хранить числа как строки?Это вопрос к архитектору БД. Я тоже вот этим обстоятельством как раз недоволен.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537570
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL SQL НовичокStaxраз сказал что ошибка, тем более грубая, что корона слетит, если обьяснит в чем грубость
andrey_anonymousподойти к тимлиду и попросить детальных пояснений.
И он таки пояснил. Сказал, что неявное преобразование данных приводит к неоправданному повышению нагрузки на сервер БД и кинул мне ссылку "на почитать" (см. выше).

Повышение нагрузки потенциально возможно при наличии индекса по полю RECEIPT,
и тут уже важно как ети цифирки хранятся в поле, выровненные по правому/левому полю, дополненные нулями, как null хранится (встречал что как пробел) и тд

ps
імхо, надо приставать к лидеру, пусть расказывает, или дает права ...

.....
stax
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537575
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousА на будущее можно дать рекомендацию, которая справедлива в большинстве случаев: тип данных в таблице - первичен.
По возможности избегайте применения функций вообще и преобразований типа в частности к полям таблицы в кляузе where - вместо этого преобразуйте параметры.

Иногда так архитекторы настроят, что без преобразования тяжеловато
напр числовые коды в строке выровненные влево ('10','7','72','3','100') и выбрать из диапазона с по

.....
stax
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537580
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderкакого хрена тогда хранить числа как строки?
Никто не говорил, что там именно числа. Так считает топикстартер. У вас например БИК банка (это всегда цифры и только цифры) - это число или строка?
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537585
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2kБИК банка (это всегда цифры и только цифры)Зарекаться от IBAN, как минимум, неразумно. А пока рекомендую строку с check-ом.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537587
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderPL SQL Новичокно даже если вдруг там появятся "нечисловые" строкикакого хрена тогда хранить числа как строки?
Саян, не строки это.
Идентификаторы.
ИМХО ТС несколько горяч - это пройдет с опытом.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537588
PL SQL Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2kНикто не говорил, что там именно числа
там именно числа. Такова постановка задачи, а вовсе не потому, что я так посчитал.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537592
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxandrey_anonymousА на будущее можно дать рекомендацию, которая справедлива в большинстве случаев: тип данных в таблице - первичен.
По возможности избегайте применения функций вообще и преобразований типа в частности к полям таблицы в кляузе where - вместо этого преобразуйте параметры.

Иногда так архитекторы настроят, что без преобразования тяжеловато
напр числовые коды в строке выровненные влево ('10','7','72','3','100') и выбрать из диапазона с по
В телекоме коды ABC/DEF именно таковы.
Я на них в свое время "собаку съел", решая задачу эффективной привязки зоны к номеру по наиболее полному соответствию.
Виталий, кстати, подсказал одно из весьма эффективных решений - для одиночных поисков (для массовых операций есть способы более эффективные, хотя и довольно сложные технически).
Но к преобразованию цифровых кодов в числа для решения задач поиска не прибегал.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537673
xtenderPL SQL Новичокно даже если вдруг там появятся "нечисловые" строкикакого хрена тогда хранить числа как строки?Может архитектор задумывал как внешний номер. Может его пишут от руки на салфетке и не всегда можно разобрать, где рыбу заворачивали. Я бы в таком случае заложил блоб для хранения картинки идентификатора.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537678
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архе те, кто р...xtenderпропущено...
какого хрена тогда хранить числа как строки?Может архитектор задумывал как внешний номер. Может его пишут от руки на салфетке и не всегда можно разобрать, где рыбу заворачивали. Я бы в таком случае заложил блоб для хранения картинки идентификатора.
картинки мало - нужно видео не менее 30 минут с размышлениями создателя, почему именно такой идентификатор был выбран для данного случая.

я так и не понял, почему до сих пор не выяснили, А1 и А2 - это числа или нет? )))

и мы так и не услышали мнение начальника транспортного цеха сурового тимлида, бьющего линейкой по пальцам за "грубые" ошибки.
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537780
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL SQL Новичок,

Нормальная практика. В больших, масштабируемых системах всегда закладываются на возможность изменения бизнес правил. Число это - часный случай строки. Архитектор запроектировал, а какие данные туда упали числа или строки ему не известно. А если кто-то по строкам делает "between", то кто ему доктор :)
...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537783
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymousВ телекоме коды ABC/DEF именно таковы.
Я на них в свое время "собаку съел", решая задачу эффективной привязки зоны к номеру по наиболее полному соответствию.кстати, да, очень интересная и полезная задачка. Я уже тут видел похожие топики и даже что-то решал, но сейчас что-то не осилил поиском найти твои...
Может отдельный топик создашь про нее со своими решениями? Туда и другие варианты накидаем :)

я тут минут 10 подумал и такое наваял:
исходные таблички
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table test as
select  to_char(1000+level) STR
from dual
connect by level<=1e6
/
create table prefixes(prefix varchar2(10) primary key,descr varchar2(100));
insert into prefixes
select column_value prefix 
      ,'descr '||column_value descr
from table(ku$_vcnt('1','2','3','4','5','6','7','8','9'
                  ,'10','100','14','145'
                  ,'22','222'
                  ,'30','300','31','311'
                  ,'44','444'
                  ,'55','555','5555'
                  ,'66','666','6666'
                  ,'77','777','700'
                  ,'80','800','801'
                  ,'90','99','993')) t
/


мое решение
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
alter table prefixes add len number generated always as (length(prefix))
/
create unique index ix_prefixes on prefixes(len,prefix,descr);
/
with 
  n as (
    select/*+ inline */ (select max(len) from prefixes)-level+1 N
    from dual 
    connect by level<=(select max(len) from prefixes)
 )
select
  str
  ,(select 
       (select p.descr from prefixes p where p.len=n.n and p.prefix=substr(str,1,n.n))
    from N
    where (select p.descr from prefixes p where p.len=n.n and p.prefix=substr(str,1,n.n)) is not null
      and rownum=1
   )
from test;

...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537786
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
еще немного подумав, понял что для коротких префиксов оптимальнее будет так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
alter table prefixes add len number generated always as (length(prefix))
/
create unique index ix_prefixes on prefixes(len,prefix,descr);
/
create or replace function max_prefix_len return int result_cache deterministic as
   res int;
begin
   select max(len) into res from prefixes;
   return res;
end;
/
create or replace function get_prefix(str in varchar2) return rowid result_cache deterministic as
   ml int := max_prefix_len;
   res rowid;
   cursor c is 
     with 
       n as (
       select/*+ inline */ ml-level+1 N
       from dual 
       connect by level<=ml
     )
     select 
       (select p.rowid from prefixes p where p.len=n.n and p.prefix=substr(str,1,n.n))
     from N
     where (select p.rowid from prefixes p where p.len=n.n and p.prefix=substr(str,1,n.n)) is not null;

begin
   open c;
   fetch c into res;
   close c;
   return res;
end;
/
select
  str,p.*
from test t
    ,prefixes p
where p.rowid=get_prefix(substr(t.str,1,max_prefix_len));

...
Рейтинг: 0 / 0
Число хранится как текст. Как написать выборку с использованием between?
    #39537807
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderно сейчас что-то не осилил поиском найти твоиElicSTFF Как можно выбрать максимум подходящую строку из таблицы?
...
Рейтинг: 0 / 0
25 сообщений из 89, страница 3 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Число хранится как текст. Как написать выборку с использованием between?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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