2015-11-30 2 views
1

J'essaie d'extraire l'année d'un champ de date en utilisant la fonction SQLDF. J'espérais que le DATEPART de SQL fonctionnerait mais je dois utiliser STRFTIME à la place (je pense). Quand j'applique le code, je reçois NA sous le YYYY. Mon code est ci-dessous:Extraire l'année en utilisant strftime dans sqldf

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 
") 
+0

Cela fonctionne 100%, merci – PiePhonic

Répondre

2

Le backend SQLite par défaut sqldf utilisations ne sont pas idéales pour faire face aux dates qu'il n'a pas de date ou les types datetime mais il a des fonctions qui traitent avec eux afin que vous puissiez le faire. (Notez que le type de date R est stocké dans la base de données SQLite comme jours depuis l'époque et en multipliant par 3 600 * 24, nous obtenons les secondes depuis l'époque où elle met dans la représentation d'horodatage que strftime sqlite attend.)

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 

il est un peu plus facile si vous utilisez le backend H2 car il a un vrai type de date et les fonctions associées:

library(sqldf) 
library(RH2) 

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

note: la prochaine fois s'il vous plaît fournir le code autonome et toutes les entrées de la question afin que toute personne d'autre peut exécuter votre code.

+0

C'est la bonne réponse. Je vous remercie! – AffableAmbler