[discrete]
[[esql-date_trunc]]
=== `DATE_TRUNC`

*Syntax*

[source,esql]
----
DATE_TRUNC(interval, date)
----

*Parameters*

`interval`::
Interval, expressed using the <<esql-timespan-literals,timespan literal
syntax>>. If `null`, the function returns `null`.

`date`::
Date expression. If `null`, the function returns `null`.

*Description*

Rounds down a date to the closest interval.

*Examples*

[source.merge.styled,esql]
----
include::{esql-specs}/date.csv-spec[tag=docsDateTrunc]
----
[%header.monospaced.styled,format=dsv,separator=|]
|===
include::{esql-specs}/date.csv-spec[tag=docsDateTrunc-result]
|===

Combine `DATE_TRUNC` with <<esql-stats-by>> to create date histograms. For
example, the number of hires per year:

[source.merge.styled,esql]
----
include::{esql-specs}/date.csv-spec[tag=docsDateTruncHistogram]
----
[%header.monospaced.styled,format=dsv,separator=|]
|===
include::{esql-specs}/date.csv-spec[tag=docsDateTruncHistogram-result]
|===

Or an hourly error rate:

[source.merge.styled,esql]
----
include::{esql-specs}/conditional.csv-spec[tag=docsCaseHourlyErrorRate]
----
[%header.monospaced.styled,format=dsv,separator=|]
|===
include::{esql-specs}/conditional.csv-spec[tag=docsCaseHourlyErrorRate-result]
|===
