ClickHouse нельзя вычислить разницу между датами, если одна из дат Date32?
select dateDiff('year', toDate32('1958-02-03'), toDate32('2022-01-01'))
дает ошибку
Code: 43. DB::Exception: Second argument for function dateDiff must be Date or DateTime: While processing dateDiff('year', toDate32('1958-02-03'), toDate32('2022-01-01')). (ILLEGAL_TYPE_OF_ARGUMENT) (version 22.3.8.39 (official build))
А в ответ тишина... В общем пока я только такой вариант вижу: with toDate32(now()) as dd1, toDate32('1949-07-24') as dd2 select if( month(dd1) < month(dd2) or ( month(dd1) = month(dd2) and day(dd1) < day(dd2) ), year(dd1) - year(dd2) - 1, year(dd1) - year(dd2) ) yy
Чем плохо так: select dateDiff('year', toDateTime64('1958-02-03',1), toDateTime64('2022-01-01',1)); Или даже так: select dateDiff('year', toDateTime64(toDate32('1958-02-03'),1), toDateTime64(toDate32('2022-01-01'),1));
Ничего не плохо. Не подумал, что можно через toDateTime64 решить эту проблему. Но, как выяснилось, считает оно не правильно. Например, в этом примере: select dateDiff('year', toDateTime64(toDate32('1949-07-25'),1), toDateTime64(now(),1)); Я ожидаю результат 72 года, а не 73. По какому алгоритму производит расчет КХ?
Чую сейчас окажется что по часовому поясу уже таки 73 :)
Нет. now отдает 2022-07-24 со временем
Ради интереса поставил 1949-07-26. Все равно 73...
там нет алгоритама, там таблица
Ну таблица по сути тоже алгоритм. Жаль, что расчет далек от реального
Ну а 32 Дейт там минимум разве не 1970 ?
Это Datetime32 с 1970. Date32 – с 1925
Обсуждают сегодня