powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вилы с сортировкой по дате после to_char
3 сообщений из 3, страница 1 из 1
Вилы с сортировкой по дате после to_char
    #34372891
ShadyAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня таблица с отсчетами по несколько раз в день. У каждой записи (отсчета) есть timestamp ts (тоесть время и дата) когда она была добавлена. Мне нужно выбрать даты когда была внесена хоть одна запись (только даты).

Делаю так:
select distinct to_char(ts, 'DD.MM.YY') as date order by date
получаю нужные мне даты (10шт), отсоритрованные как... строки :-/

Чешу репу, делаю
select distinct to_char(ts, 'DD.MM.YY') as date, ts order by ts
получаю все записи (~70шт), сколько есть, а не только даты. Павда, отсортированные как надо

Меняю на
select distinct to_char(ts, 'DD.MM.YY') as date order by ts
Получаю ошибку "для select distinct выражение для order by дложно присутствовать в списке выбираемых полей"

Вилы. Как отсортировать даты, полученные первым запросом как даты а не как строки, а то у меня 06.01.2007 больше чем 02.03.2007 :(
...
Рейтинг: 0 / 0
Вилы с сортировкой по дате после to_char
    #34372895
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngel... select distinct to_char(ts, 'DD.MM.YY')...
...
Вилы. Как отсортировать даты, полученные первым запросом как даты а не как строки, а то у меня 06.01.2007 больше чем 02.03.2007 :(TO_CHAR именно это и делает - преобразовывает дату в строковое представление с учетом указанного формата, то есть после её действия дата перестает быть датой и становится строкой, тип данных с timestamp/date меняется на VARCHAR.
Чтобы даты в строковом представлении сортировались как даты, нужно :

1) Либо формат преобразования выбрать в виде: 'YYYY.MM.DD'
Код: plaintext
1.
select distinct to_char(ts, 'YYYY.MM.DD') as date 
order by date

2) Либо в select-листе делать два преобразования даты в строку - одно для отображения даты в нужном формате, а другое - для обеспечения правильной сортировки.
Код: plaintext
1.
2.
select distinct to_char(ts, 'DD.MM.YY') as date_for_view, 
       to_char(ts, 'YYYY.MM.DD') as date_for_order 
order by date_for_order

3) Либо делать преобразование поля с датой в Select-листе в строку, а при сортировке эту строку снова преобразовывать в дату:
Код: plaintext
1.
select distinct to_char(ts, 'DD.MM.YY') as date 
order by to_date(date, 'DD.MM.RR')

4) Как вариант, если задача сводится лишь к отсечению порции времени, то можно использовать функцию TRUNC:
Код: plaintext
1.
select distinct trunc(ts) as date 
order by date
...
Рейтинг: 0 / 0
Вилы с сортировкой по дате после to_char
    #34372901
ShadyAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо :) Всё получилось отлично
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вилы с сортировкой по дате после to_char
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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