123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290 |
- [role="xpack"]
- [testenv="basic"]
- [[sql-functions-datetime]]
- === Date/Time and Interval Functions and Operators
- {es-sql} offers a wide range of facilities for performing date/time manipulations.
- [[sql-functions-datetime-interval]]
- ==== Intervals
- A common requirement when dealing with date/time in general revolves around
- the notion of `interval`, a topic that is worth exploring in the context of {es} and {es-sql}.
- {es} has comprehensive support for <<date-math, date math>> both inside <<date-math-index-names, index names>> and <<mapping-date-format, queries>>.
- Inside {es-sql} the former is supported as is by passing the expression in the table name, while the latter is supported through the standard SQL `INTERVAL`.
- The table below shows the mapping between {es} and {es-sql}:
- [cols="^m,^m"]
- |==========================
- s|{es}
- s|{es-sql}
- 2+h| Index/Table datetime math
- 2+|<index-{now/M{YYYY.MM}}>
- 2+h| Query date/time math
- | 1y | INTERVAL 1 YEAR
- | 2M | INTERVAL 2 MONTH
- | 3w | INTERVAL 21 DAY
- | 4d | INTERVAL 4 DAY
- | 5h | INTERVAL 5 HOUR
- | 6m | INTERVAL 6 MINUTE
- | 7s | INTERVAL 7 SECOND
- |==========================
- `INTERVAL` allows either `YEAR` and `MONTH` to be mixed together _or_ `DAY`, `HOUR`, `MINUTE` and `SECOND`.
- TIP: {es-sql} accepts also the plural for each time unit (e.g. both `YEAR` and `YEARS` are valid).
- Example of the possible combinations below:
- [cols="^,^"]
- |===
- s|Interval
- s|Description
- | `INTERVAL '1-2' YEAR TO MONTH` | 1 year and 2 months
- | `INTERVAL '3 4' DAYS TO HOURS` | 3 days and 4 hours
- | `INTERVAL '5 6:12' DAYS TO MINUTES` | 5 days, 6 hours and 12 minutes
- | `INTERVAL '3 4:56:01' DAY TO SECOND` | 3 days, 4 hours, 56 minutes and 1 second
- | `INTERVAL '2 3:45:01.23456789' DAY TO SECOND` | 2 days, 3 hours, 45 minutes, 1 second and 234567890 nanoseconds
- | `INTERVAL '123:45' HOUR TO MINUTES` | 123 hours and 45 minutes
- | `INTERVAL '65:43:21.0123' HOUR TO SECONDS` | 65 hours, 43 minutes, 21 seconds and 12300000 nanoseconds
- | `INTERVAL '45:01.23' MINUTES TO SECONDS` | 45 minutes, 1 second and 230000000 nanoseconds
- |===
- ==== Operators
- Basic arithmetic operators (`+`, `-`, `*`) support date/time parameters as indicated below:
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dtIntervalPlusInterval]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dtDateTimePlusInterval]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dtMinusInterval]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dtIntervalMinusInterval]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dtDateTimeMinusInterval]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dtIntervalMul]
- --------------------------------------------------
- ==== Functions
- Functions that target date/time.
- [[sql-functions-current-date]]
- ==== `CURRENT_DATE/CURDATE`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- CURRENT_DATE
- CURRENT_DATE()
- CURDATE()
- --------------------------------------------------
- *Input*: _none_
- *Output*: date
- *Description*: Returns the date (no time part) when the current query reached the server.
- It can be used both as a keyword: `CURRENT_DATE` or as a function with no arguments: `CURRENT_DATE()`.
- [NOTE]
- Unlike CURRENT_DATE, `CURDATE()` can only be used as a function with no arguments and not as a keyword.
- This method always returns the same value for its every occurrence within the same query.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[currentDate]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[currentDateFunction]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[curDateFunction]
- --------------------------------------------------
- Typically, this function (as well as its twin <<sql-functions-today,TODAY())>> function
- is used for relative date filtering:
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[filterToday]
- --------------------------------------------------
- [[sql-functions-current-time]]
- ==== `CURRENT_TIME/CURTIME`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- CURRENT_TIME
- CURRENT_TIME([precision]) <1>
- CURTIME
- --------------------------------------------------
- *Input*:
- <1> fractional digits; optional
- *Output*: time
- *Description*: Returns the time when the current query reached the server.
- As a function, `CURRENT_TIME()` accepts _precision_ as an optional
- parameter for rounding the second fractional digits (nanoseconds). The default _precision_ is 3,
- meaning a milliseconds precision current time will be returned.
- This method always returns the same value for its every occurrence within the same query.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[currentTime]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[currentTimeFunction]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[curTimeFunction]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[currentTimeFunctionPrecision]
- --------------------------------------------------
- Typically, this function is used for relative date/time filtering:
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[filterCurrentTime]
- --------------------------------------------------
- [IMPORTANT]
- Currently, using a _precision_ greater than 6 doesn't make any difference to the output of the
- function as the maximum number of second fractional digits returned is 6.
- [[sql-functions-current-timestamp]]
- ==== `CURRENT_TIMESTAMP`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- CURRENT_TIMESTAMP
- CURRENT_TIMESTAMP([precision]) <1>
- --------------------------------------------------
- *Input*:
- <1> fractional digits; optional
- *Output*: date/time
- *Description*: Returns the date/time when the current query reached the server.
- As a function, `CURRENT_TIMESTAMP()` accepts _precision_ as an optional
- parameter for rounding the second fractional digits (nanoseconds). The default _precision_ is 3,
- meaning a milliseconds precision current date/time will be returned.
- This method always returns the same value for its every occurrence within the same query.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[curTs]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[curTsFunction]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[curTsFunctionPrecision]
- --------------------------------------------------
- Typically, this function (as well as its twin <<sql-functions-now,NOW())>> function is used for
- relative date/time filtering:
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[filterNow]
- --------------------------------------------------
- [IMPORTANT]
- Currently, using a _precision_ greater than 6 doesn't make any difference to the output of the
- function as the maximum number of second fractional digits returned is 6.
- [[sql-functions-datetime-add]]
- ==== `DATE_ADD/DATEADD/TIMESTAMP_ADD/TIMESTAMPADD`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DATE_ADD(
- string_exp, <1>
- integer_exp, <2>
- datetime_exp) <3>
- --------------------------------------------------
- *Input*:
- <1> string expression denoting the date/time unit to add to the date/datetime
- <2> integer expression denoting how many times the above unit should be added to/from the date/datetime,
- if a negative value is used it results to a subtraction from the date/datetime
- <3> date/datetime expression
- *Output*: datetime
- *Description*: Add the given number of date/time units to a date/datetime. If the number of units is negative then it's subtracted from
- the date/datetime. If any of the three arguments is `null` a `null` is returned.
- [WARNING]
- If the second argument is a long there is possibility of truncation since an integer value will be extracted and
- used from that long.
- [cols="^,^"]
- |===
- 2+h|Datetime units to add/subtract
- s|unit
- s|abbreviations
- | year | years, yy, yyyy
- | quarter | quarters, qq, q
- | month | months, mm, m
- | dayofyear | dy, y
- | day | days, dd, d
- | week | weeks, wk, ww
- | weekday | weekdays, dw
- | hour | hours, hh
- | minute | minutes, mi, n
- | second | seconds, ss, s
- | millisecond | milliseconds, ms
- | microsecond | microseconds, mcs
- | nanosecond | nanoseconds, ns
- |===
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateAddDateTimeYears]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateAddDateTimeWeeks]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateAddDateTimeSeconds]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateAddDateQuarters]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateAddDateMinutes]
- --------------------------------------------------
- [[sql-functions-datetime-diff]]
- ==== `DATE_DIFF/DATEDIFF/TIMESTAMP_DIFF/TIMESTAMPDIFF`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DATE_DIFF(
- string_exp, <1>
- datetime_exp, <2>
- datetime_exp) <3>
- --------------------------------------------------
- *Input*:
- <1> string expression denoting the date/time unit difference between the following two date/datetime expressions
- <2> start date/datetime expression
- <3> end date/datetime expression
- *Output*: integer
- *Description*: Subtract the second argument from the third argument and return their difference in multiples of the unit
- specified in the first argument. If the second argument (start) is greater than the third argument (end),
- then negative values are returned. If any of the three arguments is `null`, a `null` is returned.
- [cols="^,^"]
- |===
- 2+h|Datetime difference units
- s|unit
- s|abbreviations
- | year | years, yy, yyyy
- | quarter | quarters, qq, q
- | month | months, mm, m
- | dayofyear | dy, y
- | day | days, dd, d
- | week | weeks, wk, ww
- | weekday | weekdays, dw
- | hour | hours, hh
- | minute | minutes, mi, n
- | second | seconds, ss, s
- | millisecond | milliseconds, ms
- | microsecond | microseconds, mcs
- | nanosecond | nanoseconds, ns
- |===
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateDiffDateTimeYears]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateDiffDateTimeWeeks]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateDiffDateTimeSeconds]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateDiffDateQuarters]
- --------------------------------------------------
- [NOTE]
- For `hour` and `minute`, `DATEDIFF` doesn't do any rounding, but instead first truncates
- the more detailed time fields on the 2 dates to zero and then calculates the subtraction.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateDiffDateTimeHours]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateDiffDateTimeMinutes]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateDiffDateMinutes]
- --------------------------------------------------
- [[sql-functions-datetime-dateparse]]
- ==== `DATE_PARSE`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DATE_PARSE(
- string_exp, <1>
- string_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> date expression as a string
- <2> parsing pattern
- *Output*: date
- *Description*: Returns a date by parsing the 1st argument using the format specified in the 2nd argument. The parsing
- format pattern used is the one from
- https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/time/format/DateTimeFormatter.html[`java.time.format.DateTimeFormatter`].
- If any of the two arguments is `null` or an empty string, then `null` is returned.
- [NOTE]
- If the parsing pattern does not contain all valid date units (e.g. 'HH:mm:ss', 'dd-MM HH:mm:ss', etc.) an error is returned
- as the function needs to return a value of `date` type which will contain date part.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateParse1]
- --------------------------------------------------
- [NOTE]
- ====
- The resulting `date` will have the time zone specified by the user through the
- <<sql-rest-fields-timezone,`time_zone`>>/<<jdbc-cfg-timezone,`timezone`>> REST/driver parameters
- with no conversion applied.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateParse2]
- --------------------------------------------------
- ====
- [[sql-functions-datetime-datetimeformat]]
- ==== `DATETIME_FORMAT`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DATETIME_FORMAT(
- date_exp/datetime_exp/time_exp, <1>
- string_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> date/datetime/time expression
- <2> format pattern
- *Output*: string
- *Description*: Returns the date/datetime/time as a string using the format specified in the 2nd argument. The formatting
- pattern used is the one from
- https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/time/format/DateTimeFormatter.html[`java.time.format.DateTimeFormatter`].
- If any of the two arguments is `null` or the pattern is an empty string `null` is returned.
- [NOTE]
- If the 1st argument is of type `time`, then pattern specified by the 2nd argument cannot contain date related units
- (e.g. 'dd', 'MM', 'yyyy', etc.). If it contains such units an error is returned.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateTimeFormatDate]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateTimeFormatDateTime]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateTimeFormatTime]
- --------------------------------------------------
- [[sql-functions-datetime-datetimeparse]]
- ==== `DATETIME_PARSE`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DATETIME_PARSE(
- string_exp, <1>
- string_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> datetime expression as a string
- <2> parsing pattern
- *Output*: datetime
- *Description*: Returns a datetime by parsing the 1st argument using the format specified in the 2nd argument. The parsing
- format pattern used is the one from
- https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/time/format/DateTimeFormatter.html[`java.time.format.DateTimeFormatter`].
- If any of the two arguments is `null` or an empty string `null` is returned.
- [NOTE]
- If the parsing pattern contains only date or only time units (e.g. 'dd/MM/yyyy', 'HH:mm:ss', etc.) an error is returned
- as the function needs to return a value of `datetime` type which must contain both.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateTimeParse1]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateTimeParse2]
- --------------------------------------------------
- [NOTE]
- ====
- If timezone is not specified in the datetime string expression and the parsing pattern, the resulting `datetime` will have the
- time zone specified by the user through the <<sql-rest-fields-timezone,`time_zone`>>/<<jdbc-cfg-timezone,`timezone`>> REST/driver parameters
- with no conversion applied.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dateTimeParse3]
- --------------------------------------------------
- ====
- [[sql-functions-datetime-timeparse]]
- ==== `TIME_PARSE`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- TIME_PARSE(
- string_exp, <1>
- string_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> time expression as a string
- <2> parsing pattern
- *Output*: time
- *Description*: Returns a time by parsing the 1st argument using the format specified in the 2nd argument. The parsing
- format pattern used is the one from
- https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/time/format/DateTimeFormatter.html[`java.time.format.DateTimeFormatter`].
- If any of the two arguments is `null` or an empty string `null` is returned.
- [NOTE]
- If the parsing pattern contains only date units (e.g. 'dd/MM/yyyy') an error is returned
- as the function needs to return a value of `time` type which will contain only time.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[timeParse1]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[timeParse2]
- --------------------------------------------------
- [NOTE]
- ====
- If timezone is not specified in the time string expression and the parsing pattern,
- the resulting `time` will have the offset of the time zone specified by the user through the
- <<sql-rest-fields-timezone,`time_zone`>>/<<jdbc-cfg-timezone,`timezone`>> REST/driver
- parameters at the Unix epoch date (`1970-01-01`) with no conversion applied.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[timeParse3]
- --------------------------------------------------
- ====
- [[sql-functions-datetime-part]]
- ==== `DATE_PART/DATEPART`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DATE_PART(
- string_exp, <1>
- datetime_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> string expression denoting the unit to extract from the date/datetime
- <2> date/datetime expression
- *Output*: integer
- *Description*: Extract the specified unit from a date/datetime. If any of the two arguments is `null` a `null` is returned.
- It's similar to <<sql-functions-datetime-extract>> but with different names and aliases for the units and
- provides more options (e.g.: `TZOFFSET`).
- [cols="^,^"]
- |===
- 2+h|Datetime units to extract
- s|unit
- s|abbreviations
- | year | years, yy, yyyy
- | quarter | quarters, qq, q
- | month | months, mm, m
- | dayofyear | dy, y
- | day | days, dd, d
- | week | weeks, wk, ww
- | weekday | weekdays, dw
- | hour | hours, hh
- | minute | minutes, mi, n
- | second | seconds, ss, s
- | millisecond | milliseconds, ms
- | microsecond | microseconds, mcs
- | nanosecond | nanoseconds, ns
- | tzoffset | tz
- |===
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[datePartDateTimeYears]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[datePartDateTimeMinutes]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[datePartDateQuarter]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[datePartDateMonth]
- --------------------------------------------------
- [NOTE]
- For `week` and `weekday` the unit is extracted using the non-ISO calculation, which means
- that a given week is considered to start from Sunday, not Monday.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[datePartDateTimeWeek]
- --------------------------------------------------
- [NOTE]
- The `tzoffset` returns the total number of minutes (signed) that represent the time zone's offset.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[datePartDateTimeTzOffsetPlus]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[datePartDateTimeTzOffsetMinus]
- --------------------------------------------------
- [[sql-functions-datetime-trunc]]
- ==== `DATE_TRUNC/DATETRUNC`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DATE_TRUNC(
- string_exp, <1>
- datetime_exp/interval_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> string expression denoting the unit to which the date/datetime/interval should be truncated to
- <2> date/datetime/interval expression
- *Output*: datetime/interval
- *Description*: Truncate the date/datetime/interval to the specified unit by setting all fields that are less significant than the specified
- one to zero (or one, for day, day of week and month). If any of the two arguments is `null` a `null` is returned.
- If the first argument is `week` and the second argument is of `interval` type, an error is thrown since the `interval` data type doesn't support a `week` time unit.
- [cols="^,^"]
- |===
- 2+h|Datetime truncation units
- s|unit
- s|abbreviations
- | millennium | millennia
- | century | centuries
- | decade | decades
- | year | years, yy, yyyy
- | quarter | quarters, qq, q
- | month | months, mm, m
- | week | weeks, wk, ww
- | day | days, dd, d
- | hour | hours, hh
- | minute | minutes, mi, n
- | second | seconds, ss, s
- | millisecond | milliseconds, ms
- | microsecond | microseconds, mcs
- | nanosecond | nanoseconds, ns
- |===
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateDateTimeMillennium]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateDateTimeWeek]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateDateTimeMinutes]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateDateDecades]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateDateQuarter]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateIntervalCenturies]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateIntervalHour]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[truncateIntervalDay]
- --------------------------------------------------
- [[sql-functions-datetime-format]]
- ==== `FORMAT`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- FORMAT(
- date_exp/datetime_exp/time_exp, <1>
- string_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> date/datetime/time expression
- <2> format pattern
- *Output*: string
- *Description*: Returns the date/datetime/time as a string using the
- https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql#arguments[format] specified in the 2nd argument. The formatting
- pattern used is the one from
- https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings[Microsoft SQL Server Format Specification].
- If any of the two arguments is `null` or the pattern is an empty string `null` is returned.
- [NOTE]
- If the 1st argument is of type `time`, then pattern specified by the 2nd argument cannot contain date related units
- (e.g. 'dd', 'MM', 'YYYY', etc.). If it contains such units an error is returned. +
- Format specifier `F` will be working similar to format specifier `f`.
- It will return the fractional part of seconds, and the number of digits will be same as of the number of `Fs` provided as input (up to 9 digits).
- Result will contain `0` appended in the end to match with number of `F` provided.
- e.g.: for a time part `10:20:30.1234` and pattern `HH:mm:ss.FFFFFF`, the output string of the function would be: `10:20:30.123400`. +
- Format specifier `y` will return year-of-era instead of one/two low-order digits.
- eg.: For year `2009`, `y` will be returning `2009` instead of `9`. For year `43`, `y` format specifier will return `43`.
- - Special characters like `"` , `\` and `%` will be returned as it is without any change. eg.: formatting date `17-sep-2020` with `%M` will return `%9`
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[formatDate]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[formatDateTime]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[formatTime]
- --------------------------------------------------
- [[sql-functions-datetime-to_char]]
- ==== `TO_CHAR`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- TO_CHAR(
- date_exp/datetime_exp/time_exp, <1>
- string_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> date/datetime/time expression
- <2> format pattern
- *Output*: string
- *Description*: Returns the date/datetime/time as a string using the format specified in the 2nd argument. The formatting
- pattern conforms to
- https://www.postgresql.org/docs/13/functions-formatting.html[PostgreSQL Template Patterns for Date/Time Formatting].
- If any of the two arguments is `null` or the pattern is an empty string `null` is returned.
- [NOTE]
- If the 1st argument is of type `time`, then the pattern specified by the 2nd argument cannot contain date related units
- (e.g. 'dd', 'MM', 'YYYY', etc.). If it contains such units an error is returned. +
- The result of the patterns `TZ` and `tz` (time zone abbreviations) in some cases differ from the results returned by the `TO_CHAR`
- in PostgreSQL. The reason is that the time zone abbreviations specified by the JDK are different from the ones specified by PostgreSQL.
- This function might show an actual time zone abbreviation instead of the generic `LMT` or empty string or offset returned by the PostgreSQL
- implementation. The summer/daylight markers might also differ between the two implementations (e.g. will show `HT` instead of `HST`
- for Hawaii). +
- The `FX`, `TM`, `SP` pattern modifiers are not supported and will show up as `FX`, `TM`, `SP` literals in the output.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[toCharDate]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[toCharDateTime]
- --------------------------------------------------
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[toCharTime]
- --------------------------------------------------
- [[sql-functions-datetime-day]]
- ==== `DAY_OF_MONTH/DOM/DAY`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DAY_OF_MONTH(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the day of the month from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dayOfMonth]
- --------------------------------------------------
- [[sql-functions-datetime-dow]]
- ==== `DAY_OF_WEEK/DAYOFWEEK/DOW`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DAY_OF_WEEK(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the day of the week from a date/datetime. Sunday is `1`, Monday is `2`, etc.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dayOfWeek]
- --------------------------------------------------
- [[sql-functions-datetime-doy]]
- ==== `DAY_OF_YEAR/DOY`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DAY_OF_YEAR(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the day of the year from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dayOfYear]
- --------------------------------------------------
- [[sql-functions-datetime-dayname]]
- ==== `DAY_NAME/DAYNAME`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- DAY_NAME(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: string
- *Description*: Extract the day of the week from a date/datetime in text format (`Monday`, `Tuesday`...).
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dayName]
- --------------------------------------------------
- [[sql-functions-datetime-hour]]
- ==== `HOUR_OF_DAY/HOUR`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- HOUR_OF_DAY(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the hour of the day from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[hourOfDay]
- --------------------------------------------------
- [[sql-functions-datetime-isodow]]
- ==== `ISO_DAY_OF_WEEK/ISODAYOFWEEK/ISODOW/IDOW`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- ISO_DAY_OF_WEEK(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the day of the week from a date/datetime, following the {wikipedia}/ISO_week_date[ISO 8601 standard].
- Monday is `1`, Tuesday is `2`, etc.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[isoDayOfWeek]
- --------------------------------------------------
- [[sql-functions-datetime-isoweek]]
- ==== `ISO_WEEK_OF_YEAR/ISOWEEKOFYEAR/ISOWEEK/IWOY/IW`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- ISO_WEEK_OF_YEAR(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the week of the year from a date/datetime, following {wikipedia}/ISO_week_date[ISO 8601 standard]. The first week
- of a year is the first week with a majority (4 or more) of its days in January.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[isoWeekOfYear]
- --------------------------------------------------
- [[sql-functions-datetime-minuteofday]]
- ==== `MINUTE_OF_DAY`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- MINUTE_OF_DAY(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the minute of the day from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[minuteOfDay]
- --------------------------------------------------
- [[sql-functions-datetime-minute]]
- ==== `MINUTE_OF_HOUR/MINUTE`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- MINUTE_OF_HOUR(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the minute of the hour from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[minuteOfHour]
- --------------------------------------------------
- [[sql-functions-datetime-month]]
- ==== `MONTH_OF_YEAR/MONTH`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- MONTH(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the month of the year from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[monthOfYear]
- --------------------------------------------------
- [[sql-functions-datetime-monthname]]
- ==== `MONTH_NAME/MONTHNAME`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- MONTH_NAME(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: string
- *Description*: Extract the month from a date/datetime in text format (`January`, `February`...).
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[monthName]
- --------------------------------------------------
- [[sql-functions-now]]
- ==== `NOW`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- NOW()
- --------------------------------------------------
- *Input*: _none_
- *Output*: datetime
- *Description*: This function offers the same functionality as <<sql-functions-current-timestamp,CURRENT_TIMESTAMP()>> function: returns
- the datetime when the current query reached the server. This method always returns the same value for its every
- occurrence within the same query.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[nowFunction]
- --------------------------------------------------
- Typically, this function (as well as its twin <<sql-functions-current-timestamp,CURRENT_TIMESTAMP())>> function is used
- for relative date/time filtering:
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[filterNow]
- --------------------------------------------------
- [[sql-functions-datetime-second]]
- ==== `SECOND_OF_MINUTE/SECOND`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- SECOND_OF_MINUTE(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the second of the minute from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[secondOfMinute]
- --------------------------------------------------
- [[sql-functions-datetime-quarter]]
- ==== `QUARTER`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- QUARTER(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the year quarter the date/datetime falls in.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[quarter]
- --------------------------------------------------
- [[sql-functions-today]]
- ==== `TODAY`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- TODAY()
- --------------------------------------------------
- *Input*: _none_
- *Output*: date
- *Description*: This function offers the same functionality as <<sql-functions-current-date,CURRENT_DATE()>> function: returns
- the date when the current query reached the server. This method always returns the same value for its every occurrence
- within the same query.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[todayFunction]
- --------------------------------------------------
- Typically, this function (as well as its twin <<sql-functions-current-timestamp,CURRENT_TIMESTAMP())>> function is used
- for relative date filtering:
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[filterToday]
- --------------------------------------------------
- [[sql-functions-datetime-week]]
- ==== `WEEK_OF_YEAR/WEEK`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- WEEK_OF_YEAR(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the week of the year from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[weekOfYear]
- --------------------------------------------------
- [[sql-functions-datetime-year]]
- ==== `YEAR`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- YEAR(datetime_exp) <1>
- --------------------------------------------------
- *Input*:
- <1> date/datetime expression
- *Output*: integer
- *Description*: Extract the year from a date/datetime.
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[year]
- --------------------------------------------------
- [[sql-functions-datetime-extract]]
- ==== `EXTRACT`
- .Synopsis:
- [source, sql]
- --------------------------------------------------
- EXTRACT(
- datetime_function <1>
- FROM datetime_exp) <2>
- --------------------------------------------------
- *Input*:
- <1> date/time function name
- <2> date/datetime expression
- *Output*: integer
- *Description*: Extract fields from a date/datetime by specifying the name of a <<sql-functions-datetime,datetime function>>.
- The following
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[extractDayOfYear]
- --------------------------------------------------
- is the equivalent to
- [source, sql]
- --------------------------------------------------
- include-tagged::{sql-specs}/docs/docs.csv-spec[dayOfYear]
- --------------------------------------------------
|