在sqldf中使用strftime提取年份

时间:2015-11-30 15:35:23

标签: r strftime sqldf

我正在尝试使用SQLDF函数从日期字段中提取年份。我希望SQL的DATEPART可以工作但是我需要使用STRFTIME(我认为)。当我申请代码时,我在YYYY下获得NA。我的代码如下:

dw_Calendar = read.csv("C:\dw_Calendar.csv")
# ensure that the date field is in a date format
dw_Calendar$newDate <- as.Date(dw_Calendar$FullDate)

CalendarSum <- sqldf("
select newDate,
strftime('%U', newDate) as YYYY
from dw_Calendar
")

1 个答案:

答案 0 :(得分:2)

sqldf使用的默认sqlite后端不适合处理日期,因为它没有日期或日期时间类型,但它确实具有处理它们的功能,因此您可以执行此操作。 (请注意,R Date类型存储在sqlite数据库中,自Epoch以来的几天,乘以3600 * 24,我们得到自Epoch以来的秒数,它将其置于sqlite的strftime期望的时间戳表示中。)

library(sqldf)
mydates <- data.frame(date = as.Date("2000-01-01")) # test input

sqldf("select strftime('%Y', date * 3600 * 24, 'unixepoch') year from mydates")
##   year
## 1 2000

如果您使用H2后端,它会更容易,因为它具有实际日期类型和相关功能:

library(sqldf)
library(RH2)

sqldf("select year(date) year from mydates")
##   year
## 1 2000

注意:下次请提供自包含的代码和问题中的所有输入,以便其他人可以运行您的代码。