Skip to content

[C++] Date and datetime types should autocast from strings #29548

@asfimport

Description

@asfimport

When comparing dates and datetimes, people frequently expect that a string (formatted as ISO8601) will auto-cast and compare to dates and times.

Examples in R:

library(arrow)
#> 
#> Attaching package: 'arrow'
#> The following object is masked from 'package:utils':
#> 
#>     timestamp

arr <- Array$create(as.Date(c("1974-04-06", "1988-05-09")))
arr > "1980-01-01"
#> Error: NotImplemented: Function greater has no kernel matching input types (array[date32[day]], scalar[string])

# creating the scalar as a date works, of course
arr > Scalar$create(as.Date("1980-01-01"))
#> Array
#> <bool>
#> [
#>   false,
#>   true
#> ]

# datatimes also do not auto-cast
arr <- Array$create(Sys.time())
arr > "1980-01-01 00:00:00"
#> Error: NotImplemented: Function greater has no kernel matching input types (array[timestamp[us]], scalar[string])


# or a more real-world example
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
mtcars$date <- as.Date(c("1974-04-06", "1988-05-09"))

ds <- InMemoryDataset$create(mtcars)

ds %>%
  filter(date > "1980-01-01") %>%
  collect()
#> Error: NotImplemented: Function greater has no kernel matching input types (array[date32[day]], scalar[string])

Reporter: Jonathan Keane / @jonkeane
Assignee: Neal Richardson / @nealrichardson

Related issues:

Note: This issue was originally created as ARROW-13938. Please see the migration documentation for further details.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions