mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 16:42:05 +00:00
2d03d330bc
The Year 1925 is a starting point because most of the timezones switched to saner (mostly 15-minutes based) offsets somewhere during 1924 or before. And that significantly simplifies implementation. 2238 is to simplify arithmetics for sanitizing LUT index access; there are less than 0x1ffff days from 1925. * Extended DateLUTImpl internal LUT to 0x1ffff items, some of which represent negative (pre-1970) time values. As a collateral benefit, Date now correctly supports dates up to 2149 (instead of 2106). * Added a new strong typedef ExtendedDayNum, which represents dates pre-1970 and post 2149. * Functions that used to return DayNum now return ExtendedDayNum. * Refactored DateLUTImpl to untie DayNum from the dual role of being a value and an index (due to negative time). Index is now a different type LUTIndex with explicit conversion functions from DatNum, time_t, and ExtendedDayNum. * Updated DateLUTImpl to properly support values close to epoch start (1970-01-01 00:00), including negative ones. * Reduced resolution of DateLUTImpl::Values::time_at_offset_change to multiple of 15-minutes to allow storing 64-bits of time_t in DateLUTImpl::Value while keeping same size. * Minor performance updates to DateLUTImpl when building month LUT by skipping non-start-of-month days. * Fixed extractTimeZoneFromFunctionArguments to work correctly with DateTime64. * New unit-tests and stateless integration tests for both DateTime and DateTime64.
44 lines
780 B
SQL
44 lines
780 B
SQL
SELECT
|
|
n,
|
|
toTypeName(dt64) AS dt64_typename,
|
|
|
|
'<',
|
|
dt64 < d,
|
|
toDate(dt64) < d,
|
|
dt64 < toDateTime64(d, 1, 'UTC'),
|
|
|
|
'<=',
|
|
dt64 <= d,
|
|
toDate(dt64) <= d,
|
|
dt64 <= toDateTime64(d, 1, 'UTC'),
|
|
|
|
'=',
|
|
dt64 = d,
|
|
toDate(dt64) = d,
|
|
dt64 = toDateTime64(d, 1, 'UTC'),
|
|
|
|
'>=',
|
|
dt64 >= d,
|
|
toDate(dt64) >= d,
|
|
dt64 >= toDateTime64(d, 1, 'UTC'),
|
|
|
|
'>',
|
|
dt64 > d,
|
|
toDate(dt64) > d,
|
|
dt64 > toDateTime64(d, 1, 'UTC'),
|
|
|
|
'!=',
|
|
dt64 != d,
|
|
toDate(dt64) != d,
|
|
dt64 != toDateTime64(d, 1, 'UTC')
|
|
FROM
|
|
(
|
|
WITH toDateTime('2019-09-16 19:20:11') as val
|
|
SELECT
|
|
number - 1 as n,
|
|
toDateTime64(val, 1, 'UTC') AS dt64,
|
|
toDate(val, 'UTC') - n as d
|
|
FROM system.numbers
|
|
LIMIT 3
|
|
)
|