|
Сортировка типа interval
|
|||
---|---|---|---|
#18+
Коллеги, кто-нибудь может объяснить логику сортировки типа interval? Гугл не помог... WITH data as ( SELECT '2019-03-31 22:00'::timestamp as dt UNION ALL SELECT '2019-03-31 18:30' UNION ALL SELECT '2019-04-01 21:00' ) SELECT dt, age(dt,'2019-01-01') as a FROM data ORDER BY a; ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 09:44 |
|
Сортировка типа interval
|
|||
---|---|---|---|
#18+
_stas_k_, Документация : Вычитание дат и дат со временем также может быть нетривиальной операцией. Один принципиально простой способ выполнить такое вычисление — преобразовать каждое значение в количество секунд, используя EXTRACT(EPOCH FROM ...), а затем найти разницу результатов; при этом будет получено число секунд между двумя датами. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 10:14 |
|
Сортировка типа interval
|
|||
---|---|---|---|
#18+
Павел Лузанов, я знаю, как это обойти ) Мне интересна логика сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 10:25 |
|
Сортировка типа interval
|
|||
---|---|---|---|
#18+
_stas_k_, сортировка интервалов штука относительно простая. Интервал пересчитывается в int128 и сравнивается. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вот так можно заметить, что интервалы сортируются корректно. А вот вызов age даёт фокус. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 11:05 |
|
Сортировка типа interval
|
|||
---|---|---|---|
#18+
_stas_k_, Дело не в сортировке интервалов, а в том, что выдает функция age. А она "... выдаёт «символический» результат ..." (на той же странице документации). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 12:12 |
|
Сортировка типа interval
|
|||
---|---|---|---|
#18+
Павел Лузанов_stas_k_, Дело не в сортировке интервалов, а в том, что выдает функция age. А она "... выдаёт «символический» результат ..." (на той же странице документации). этто немноошко странное уттверждение а именно ф-я возвращает тип "интервал", и сравниваются интервалы но вот этот тип испорчен "символьными" вариациями, "месяц" и "год" имеющими неопределенную длительность (определяемую по месту приложения) и для целей сравнения (не в составе даты) приводимые к некой средней цифре (30 для месяца) в днях. поэтому правильнее для сравнения пользоваться только стабильными "литералами" интервалов. (без годов и месяцев) а вариации нестабильные использовать там, где они нужны -- для годовых и месячных сдвигов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 13:02 |
|
|
start [/forum/topic.php?fid=53&fpage=42&tid=1995264]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 146ms |
0 / 0 |