powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Найти максимальное значение после разделителя.
11 сообщений из 11, страница 1 из 1
Найти максимальное значение после разделителя.
    #39256758
benderator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует столбец в таблице вида:
87952345/123
87952345/7893
87952345/56
87952345/9
87952345/23456

Толкните в правильную строну как в файрберде выбрать максимальное значение после дроби, LEFT не получается потому что после дроби бывает разное количество символов, перед дробью тоже бывает как разное количество так и разный набор символов.
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39256760
benderator,

используй строковые функции. А именно: POSITION() и SUBSTRING()
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39256819
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select max(cast(substr(field1,position('/',field1)+1,999) as integer))
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39256827
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exteris,

Если надо найти не максимальное значение а всю запись в которой это значение максимально - то можно типа так:

Код: plsql
1.
2.
3.
4.
5.
select first 1
 id
 max(...)
...
order by 2 desc
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39256830
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t(s) as (
  select '87952345/123' from rdb$database union all
  select '87952345/7893' from rdb$database union all
  select '87952345/56' from rdb$database union all
  select '87952345/9' from rdb$database union all
  select '87952345/23456' from rdb$database
)
select
  max(cast(substring(s similar '%/#"%#"' escape '#') as int)) as n
from t
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39256835
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так даже правильней

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t(s) as (
  select '87952345/123' from rdb$database union all
  select '87952345/7893' from rdb$database union all
  select '87952345/56' from rdb$database union all
  select '87952345/9' from rdb$database union all
  select '87952345/23456' from rdb$database
)
select
  max(cast(substring(trim(s) similar '%/#"[0-9]+#"' escape '#') as int)) as n
from t
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39256934
benderator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, получилось.
Решение на случай если ещё буду такое искать и забуду
Код: sql
1.
max(substring(q.num from position('/' in q.num)+1)
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39256973
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
benderator,

Раз у тебя всё хорошо, прошу не возвращаться с вопросом, почему у тебя "9" больше, чем "10"
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39257246
benderator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, тоесть в моем варианте учитывается только первая цифра после '1'?
Как тогда правильнее?
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39257300
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
benderator,

CAST() сделай, потом MAX().
...
Рейтинг: 0 / 0
Найти максимальное значение после разделителя.
    #39257338
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
benderatorWildSery, тоесть в моем варианте учитывается только первая цифра после '1'?
Как тогда правильнее?Не первая. Просто сортировка для max() строковая.
Посмотри остальные советы, тебе везде предлагали к int кастовать, не зря.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Найти максимальное значение после разделителя.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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