Date and time#
Working with dates and times is quite common when using SQL. Since date columns have many specific features, there is a dedicated section for handling them.
Date#
All database systems have some types that describe jsut a date - it’s a date without time.
As an example, consider how the DATE
data type can be defined in Postgres. In the following cell, the types of the results from different ways of creating a date are printed.
--postgreSQL
SELECT
pg_typeof('2999-08-12') one,
pg_typeof(CAST('2999-08-12' AS DATE)) two,
pg_typeof('2999-08-12'::DATE) three,
pg_typeof(to_date('2999-08-12', 'YYYY-MM-DD')) four
;
SELECT 1
one | two | three | four |
---|---|---|---|
unknown | date | date | date |
In ClickHouse, dates are stored as strings. By using the toDate
function, you can make ClickHouse interpret them as datetime columns.
--ClickHouse
SELECT
toTypeName('2999-12-23'),
toTypeName(toDate('2999-12-23'));
toTypeName('2999-12-23') | toTypeName(toDate('2999-12-23')) |
---|---|
String | Date |
Datetime/Timestamp#
The Datetime
type is used to describe date and time with precision.
The following cell demonstrates a comparison of typecasting to DATE
and TIMESTAMP
in postgres.
--postgreSQL
SELECT
'2024-07-03 14:30:57.902629'::DATE,
'2024-07-03 14:30:57.902629'::TIMESTAMP;
SELECT 1
date | timestamp |
---|---|
2024-07-03 | 2024-07-03 14:30:57.902629 |
So in case DATE
there is only infomation about day but in TMESTAMP
case we’re getting accuracy up to microsecond.
The same example applies to ClickHouse.
--ClickHouse
SELECT
toDate('2024-07-03 14:30:57'),
toDateTime64('2024-07-03 14:30:57.902629', 6);
toDate('2024-07-03 14:30:57') | toDateTime64('2024-07-03 14:30:57.902629', 6) |
---|---|
2024-07-03 | 2024-07-03 14:30:57.902629 |