implicit-casting.asciidoc 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. [[esql-implicit-casting]]
  2. === {esql} implicit casting
  3. ++++
  4. <titleabbrev>Implicit casting</titleabbrev>
  5. ++++
  6. Often users will input `date`, `date_period`, `time_duration`, `ip` or `version` as simple strings in their queries for use in predicates, functions, or expressions. {esql} provides <<esql-type-conversion-functions, type conversion functions>> to explicitly convert these strings into the desired data types.
  7. Without implicit casting users must explicitly code these `to_X` functions in their queries, when string literals don't match the target data types they are assigned or compared to. Here is an example of using `to_datetime` to explicitly perform a data type conversion.
  8. [source.merge.styled,esql]
  9. ----
  10. FROM employees
  11. | EVAL dd_ns1=date_diff("day", to_datetime("2023-12-02T11:00:00.00Z"), birth_date)
  12. | SORT emp_no
  13. | KEEP dd_ns1
  14. | LIMIT 1
  15. ----
  16. [discrete]
  17. [[esql-implicit-casting-example]]
  18. ==== Implicit casting example
  19. Implicit casting automatically converts string literals to the target data type. This allows users to specify string values for types like `date`, `date_period`, `time_duration`, `ip` and `version` in their queries.
  20. The first query can be coded without calling the `to_datetime` function, as follows:
  21. [source.merge.styled,esql]
  22. ----
  23. FROM employees
  24. | EVAL dd_ns1=date_diff("day", "2023-12-02T11:00:00.00Z", birth_date)
  25. | SORT emp_no
  26. | KEEP dd_ns1
  27. | LIMIT 1
  28. ----
  29. [discrete]
  30. [[esql-implicit-casting-supported-operations]]
  31. ==== Operations that support implicit casting
  32. The following table details which {esql} operations support implicit casting for different data types.
  33. [%header.monospaced.styled,format=dsv,separator=|]
  34. |===
  35. |ScalarFunctions|Operators|<<esql-group-functions, GroupingFunctions>>|<<esql-agg-functions, AggregateFunctions>>
  36. DATE|Y|Y|Y|N
  37. DATE_PERIOD/TIME_DURATION|Y|N|Y|N
  38. IP|Y|Y|Y|N
  39. VERSION|Y|Y|Y|N
  40. BOOLEAN|Y|Y|Y|N
  41. |===
  42. ScalarFunctions includes:
  43. * <<esql-conditional-functions-and-expressions, Conditional Functions and Expressions>>
  44. * <<esql-date-time-functions, Date and Time Functions>>
  45. * <<esql-ip-functions, IP Functions>>
  46. Operators includes:
  47. * <<esql-binary-operators, Binary Operators>>
  48. * <<esql-unary-operators, Unary Operator>>
  49. * <<esql-in-operator, IN>>