[使用BETWEEN命令的SQL查询,在CRAN R中选择日期

问题描述 投票:0回答:1

ff。例子取自:https://www.datenbanken-verstehen.de/sql-tutorial/sql-between-befehl/

刚刚开始在R中学习SQL。我想获取这两个日期之间的日期列表,如'newdf.Mitarbeiter4'中所述。任何人都可以帮助我指出查询中的错误吗?关于此查询也有类似的问题,但是我仍然无法使用答案来识别我的错误。

Mitarbeiter4 <- data.frame( Nachname = c( "Wegner", "Müller", "Schulz", "Richter", "Schröder" ),
                            Vorname = c( "Lutz", "Melanie", "Dorothea", "Heiko", "Lukas" ),
                            Geburtstag = c( '12.12.1983', '01.04.1978', '13.02.1990', '15.08.1995', '24.07.1980' )
                          )

Mitarbeiter4

newdf.Mitarbeiter4 <- sqldf( "SELECT Nachname, Vorname, Geburtstag from Mitarbeiter4 WHERE Geburtstag BETWEEN '1980.01.01' AND '1993.01.01' " )

newdf.Mitarbeiter4

这给了我ff。结果:

[1] Nachname Vorname Geburtstag

<0 Zeilen>(odd row.names mitLänge0)

我尝试过两个日期。和“ /”(与其他问题一样),但对我而言仍然没有成功。

由于我在使用正确的格式时遇到问题,因此请如上面引用的教程中所述,将对我的问题进行回答的友善的人推荐给以下人员:

“ Das Ergebniswürdewie folgt aussehen:”

sql r between sqldf
1个回答
0
投票

最好先转换为Date类,然后再做

library(sqldf)
Mitarbeiter4$Geburtstag <- as.Date(Mitarbeiter4$Geburtstag, "%d.%m.%Y")
start <- as.Date("1980-01-01")
end <- as.Date("1993-01-01")
fn$sqldf("SELECT Nachname, Vorname, Geburtstag from Mitarbeiter4 
           WHERE Geburtstag between $start and $end")
# Nachname  Vorname Geburtstag
#1   Wegner     Lutz 1983-12-12
#2   Schulz Dorothea 1990-02-13
#3 Schröder    Lukas 1980-07-24

或使用tidyverse

library(dplyr)
library(lubridate)
Mitarbeiter4 %>% 
    filter(between(dmy(Geburtstag), as.Date("1980-01-01"), as.Date("1993-01-01")))
#   Nachname  Vorname Geburtstag
#1   Wegner     Lutz 12.12.1983
#2   Schulz Dorothea 13.02.1990
#3 Schröder    Lukas 24.07.1980

或在base R中>

subset(Mitarbeiter4, as.Date(Geburtstag, "%d.%m.%Y") > as.Date("1980-01-01") & 
     as.Date(Geburtstag, "%d.%m.%Y") < as.Date("1993-01-01"))
#   Nachname  Vorname Geburtstag
#1   Wegner     Lutz 12.12.1983
#3   Schulz Dorothea 13.02.1990
#5 Schröder    Lukas 24.07.1980

注意:可以在as.Date中的过滤步骤之前执行'Geburtstag'列上的subset转换,以避免多次调用as.Date

© www.soinside.com 2019 - 2024. All rights reserved.