Rstudio 和 Snowflake 帮助,尝试运行Where子句时 dbGetQuery 不起作用

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

我正在尝试使用

where
子句拉入雪花表,其中“Snapshot_Date”是日期,“Date1”是我之前在 R 代码中设置的数据值。

但是,此语句返回空白输出。我知道这是因为

where
子句出了问题,但我无法让
where
子句按预期工作。

date1 <- "2024-03-02"

file1 <- dbGetQuery(myconn,paste("
SELECT
Year,Month, Origin, CAST(Snapshot_Date as Date) as Snapshot_Date
FROM SNOWFLAKE_TABLE
WHERE CAST(Snapshot_Date as date) = CAST(',"'",date1,"'",' as date)'))

我期望 file1 数据被过滤为 snapshot_dates =“2024-03-02”

r snowflake-cloud-data-platform dbi
1个回答
0
投票

您可能需要考虑参数化查询,而不是手动构造查询字符串。除了关于恶意SQL注入的安全问题(例如,XKCD的Exploits of a Mom又名“Little Bobby Tables”)之外,还担心格式错误的字符串或Unicode-vs-ANSI错误,甚至如果是一位数据分析师运行查询。

DBI
支持参数化查询

即使你的表达式在这里没有解析(所以它显然不是你真正的代码),我认为你需要的是这样的:

file1 <- dbGetQuery(myconn, "
    SELECT Year, Month, Origin, CAST(Snapshot_Date as Date) as Snapshop_Date
    FROM SNOWFLAKE_TABLE
    WHERE CAST(Snapshot_Date as Date) = ?",
  params = list(date1))

假设

date1
Snapshot_Date
看起来像日期(例如,
"2024-04-02"
),那么您不需要
CAST(.)
,大多数数据库都会满足您的需要。 (即使他们没有推断出它是一个日期,如果它是一个字符串并且你进行字符串比较,有问题吗?)

file1 <- dbGetQuery(myconn, "
    SELECT Year, Month, Origin, CAST(Snapshot_Date as Date) as Snapshop_Date
    FROM SNOWFLAKE_TABLE
    WHERE Snapshot_Date = ?",
  params = list(date1))

选择

CAST(.)
的必要性值得怀疑,但由于我没有你的数据库,我无法确定。

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