R: Date function in sqldf giving unusual answer (wrong date format?)

前端 未结 2 1070

I am trying to add to a date using sqldf, i know it should be simple but I can\'t figure out what is wrong with my date format. Using:

sqldf(\"select date(mo         


        
相关标签:
2条回答
  • 2020-12-21 22:43

    SQLite date functions consider dates as days since Nov 24, 4714BC, which means the integer storage of 16770 for the example date of 2015-12-01 in R returns an ancient date somewhere in 4667BC.

    You can figure out that the difference between the R origin of 1970-01-01 and the SQLite origin is 2440588 days. Which means, you can take this constant into account if you want:

    test <- data.frame(model_date=as.Date("12/1/2015",format="%m/%d/%Y"))
    sqldf("select date(model_date + 2440588, '+1 day') as select_date from test")
    #  select_date
    #1  2015-12-02
    

    @HongOoi's answer is probably better, but I thought this might be interesting to know the underlying workings.

    0 讨论(0)
  • 2020-12-21 22:49

    Passing a character variable to the date() function seems to work:

    df <- data.frame(a=as.Date("2010-10-01"))
    df$b <- as.character(df$a)
    
    sqldf("select date(a) from df")
    #       date(a)
    # 1 -4672-08-24
    
    sqldf("select date(b) from df")
    #      date(b)
    # 1 2010-10-01
    
    sqldf("select date(b, '+1 day') from df")
    #   date(b, '+1 day')
    # 1        2010-10-02
    

    Note that you can do (some) arithmetic on Date objects in R directly, without needing SQL:

    df$a <- df$a + 1
    df
    #            a          b
    # 1 2010-10-02 2010-10-01
    
    0 讨论(0)
提交回复
热议问题