Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2018, 06:36   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию порядковый номер записи в выборке

Использую postgresql
Есть прекрасная возможность узнать порядковый номер записи в выборке
Код:
SELECT
"Код",
ROW_NUMBER() OVER(ORDER BY "Код") num
FROM "Коды"
ORDER BY "Код"
Предположим имеем 100 записей получаем
Код 1
Код 2
Код 3
:
Код 13
Код 14
:
Код 100


Мне нужно добавить лидирующие нули перед порядковым номером:
Код 001
Код 002
Код 003
:
Код 013
Код 014
:
Код 100

Кто подскажет, как это проще всего сделать?
polin11 вне форума Ответить с цитированием
Старый 02.12.2018, 12:31   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

попробуйте так:
Код:
select kname, to_char(num,'000') as num_new
FROM(
SELECT
"Код" as kname,
ROW_NUMBER() OVER(ORDER BY "Код") num
FROM "Коды"
ORDER BY "Код")
p.s. а для чего это Вам нужно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.12.2018, 13:07   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. а для чего это Вам нужно?
Вот именно. Скорее всего для отображения на клиенте. А там можно просто форматировать вывод нужным образом не нагружая сервер лишними действиями
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.12.2018, 13:16   #4
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию

Спасибо, работает, но to_char(num,'000') проблема в то, количество записей 100 я привел в качестве примера. Количество нулей, которые требуется добавить, нужно вычислить динамически, наверно как-то через char_length() и count().
Использую это для более сложного запроса, в котором я строю путь в таблице с иерархией до конечных записей, используя порядковые номера, как строки. И затем сортирую по этому пути, СУБД используют лексикографическую сортировку и получает , что строка '4' > строки '15'. Поэтому я решил добавлять лидирующие нули '04'<'15'
polin11 вне форума Ответить с цитированием
Старый 02.12.2018, 16:48   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от polin11 Посмотреть сообщение
И затем сортирую по этому пути, СУБД используют лексикографическую сортировку и получает , что строка '4' > строки '15'. Поэтому я решил добавлять лидирующие нули '04'<'15'
так сделайте to_char(num,'000000000') и не заморачивайтесь.


А вообще, если подходить строго, то тут попахивает кривыми костылями.
Цитата:
Сообщение от polin11 Посмотреть сообщение
Использую это для более сложного запроса, в котором я строю путь в таблице с иерархией до конечных записей
Скорее всего, Вы что-то неправильно делаете (или неправильно структуру данных задали).
Если у Вас есть ORDER BY "Код" - так и используйте этот "Код" для сортировки, зачем Вам ещё что-то городить сверху?!

Последний раз редактировалось Serge_Bliznykov; 02.12.2018 в 16:51.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Порядковый номер Zhenya Yakubov Microsoft Office Excel 3 02.09.2014 10:43
порядковый номер baks1 Microsoft Office Excel 1 30.04.2012 20:54
Порядковый номер в mysql Furyon PHP 6 03.07.2011 19:39
Порядковый номер записи Yur@ БД в Delphi 4 25.12.2009 08:37
SQL: как присвоить записи её порядковый номер? FReeMAN(Q) Помощь студентам 10 18.04.2009 11:43