我正在尝试使用
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”
您可能需要考虑参数化查询,而不是手动构造查询字符串。除了关于恶意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(.)
的必要性值得怀疑,但由于我没有你的数据库,我无法确定。