在 CRAN R 中使用 BETWEEN 命令进行 SQL 查询以选择日期

Posted

技术标签:

【中文标题】在 CRAN R 中使用 BETWEEN 命令进行 SQL 查询以选择日期【英文标题】:SQL query with the BETWEEN-command, in CRAN R to select dates 【发布时间】:2019-12-25 17:16:52 【问题描述】:

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

(oder row.names mit Länge 0)

我尝试了两个“。”的日期。和“/”与其他问题一样,但我这边仍然没有成功。

由于我对正确的格式有疑问,我能否请回复我问题的好心人参考上面引用的教程中的结果:

“Das Ergebnis würde wie folgt aussehen:”

【问题讨论】:

【参考方案1】:

转换成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

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

【讨论】:

继续:对不起,我按了 RETURN,嗯,你的第一个答案很好,现在可以正常工作了,在另一个教程中我遇到了“fn-sql”命令,这促使我现在开始工作,因为这个 BETWEEN 命令对于等待我的工作是非常必要的。

以上是关于在 CRAN R 中使用 BETWEEN 命令进行 SQL 查询以选择日期的主要内容,如果未能解决你的问题,请参考以下文章

R语言找到CRAN库已经不在提供的包手动下载并使用RStudio进行安装

安装没有在R包仓库CRAN上托管的R包

Ubuntu20.04下安装 R 及 CRAN 软件包(命令行操作)

Ubuntu20.04下安装 R 及 CRAN 软件包(命令行操作)

R 包的 CRAN 提交中的 DOI?

R语言CRAN不包含的安装包下载并手动使用RStudio进行安装实战:以下载VRPM包及绘制彩色列线图为例