|
@@ -0,0 +1,53 @@
|
|
|
+[[esql-implicit-casting]]
|
|
|
+=== {esql} implicit casting
|
|
|
+
|
|
|
+++++
|
|
|
+<titleabbrev>Implicit casting</titleabbrev>
|
|
|
+++++
|
|
|
+
|
|
|
+Often users will input `datetime`, `ip`, `version`, or geospatial objects 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.
|
|
|
+
|
|
|
+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.
|
|
|
+
|
|
|
+[source.merge.styled,esql]
|
|
|
+----
|
|
|
+FROM employees
|
|
|
+| EVAL dd_ns1=date_diff("day", to_datetime("2023-12-02T11:00:00.00Z"), birth_date)
|
|
|
+| SORT emp_no
|
|
|
+| KEEP dd_ns1
|
|
|
+| LIMIT 1
|
|
|
+----
|
|
|
+
|
|
|
+Implicit casting improves usability, by automatically converting string literals to the target data type. This is most useful when the target data type is `datetime`, `ip`, `version` or a geo spatial. It is natural to specify these as a string in queries.
|
|
|
+
|
|
|
+The first query can be coded without calling the `to_datetime` function, as follows:
|
|
|
+
|
|
|
+[source.merge.styled,esql]
|
|
|
+----
|
|
|
+FROM employees
|
|
|
+| EVAL dd_ns1=date_diff("day", "2023-12-02T11:00:00.00Z", birth_date)
|
|
|
+| SORT emp_no
|
|
|
+| KEEP dd_ns1
|
|
|
+| LIMIT 1
|
|
|
+----
|
|
|
+
|
|
|
+[float]
|
|
|
+=== Implicit casting support
|
|
|
+
|
|
|
+The following table details which {esql} operations support implicit casting for different data types.
|
|
|
+
|
|
|
+[%header.monospaced.styled,format=dsv,separator=|]
|
|
|
+|===
|
|
|
+||ScalarFunction|BinaryComparison|ArithmeticOperation|InListPredicate|AggregateFunction
|
|
|
+|DATETIME|Y|Y|Y|Y|N
|
|
|
+|DOUBLE|Y|N|N|N|N
|
|
|
+|LONG|Y|N|N|N|N
|
|
|
+|INTEGER|Y|N|N|N|N
|
|
|
+|IP|Y|Y|Y|Y|N
|
|
|
+|VERSION|Y|Y|Y|Y|N
|
|
|
+|GEO_POINT|Y|N|N|N|N
|
|
|
+|GEO_SHAPE|Y|N|N|N|N
|
|
|
+|CARTESIAN_POINT|Y|N|N|N|N
|
|
|
+|CARTESIAN_SHAPE|Y|N|N|N|N
|
|
|
+|BOOLEAN|Y|Y|Y|Y|N
|
|
|
+|===
|