| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | [[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 supportThe 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|===
 |