Я извлек данные во временную таблицу в SQL Server, используя DBI::dbGetQuery
.
Несмотря на то, что в реальном запросе (а не в запросе воспроизведения ниже), I select convert(date, date_value) as date_value
, даты по-прежнему сохраняются как символы.
Затем я пытаюсь изменить символ, представляющий дату, с помощью lubridate::ymd
, однако получаю сообщение о том, что
date_value не найден
Я также пробовал convert(date, date_value)
и as.Date
, но безрезультатно.
require(dplyr)
if (dbExistsTable(con, "##temp", catalog_name = "tempdb")){
dbRemoveTable(con, "##temp")
}
DBI::dbGetQuery(con, paste(
"select
convert(date, '2013-05-25') as date_value
into ##temp
"))
tbl(con, "##temp")
# Error - date_value not found
tbl(con, "##temp") %>% mutate(date_value= lubridate::ymd(date_value))
# this works
tbl(con, "##temp") %>% mutate(temp= date_value)
# this doesn't work - date value not found
tbl(con, "##temp") %>% mutate(temp= lubridate::ymd(date_value))
Как я могу использовать это поле как дату?
Примечание: когда я пишу следующее в SQL Server, date_value отображается как тип даты
select
convert(date, '2013-05-25') as date_value
into #hello
select *
from #hello
exec tempdb..sp_help #hello
в ответ на комментарий @Kevin Arseneau на следующем изображении показаны результаты выполнения show_query()
show_query
в вашиdplyr
каналы, чтобы мы могли видеть, что происходит с SQL? - person Kevin Arseneau   schedule 07.02.2018tidyverse
глаголы совместимы с DBI, вам может потребоваться сначалаcollect
, а затемmutate
. Вы можете попробоватьtbl(con, "##temp") %>% collect %>% mutate(temp = lubridate::ymd(date_value))
. - person Kevin Arseneau   schedule 07.02.2018