dbplyr преобразовать символ в формат даты во временной таблице
Я извлек данные во временную таблицу в SQL Server, используя DBI::dbGetQuery
,
Хотя в реальном запросе (а не в запросе воспроизведения ниже) я select convert(date, date_value) as date_value
даты все еще хранятся в виде символов.
Затем я пытаюсь изменить символ, представляющий дату, используя lubridate::ymd
Однако я получаю сообщение о том,
дата_значение не найдено
Я также пытался, 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()
1 ответ
Несколько месяцев назад я искал решение для использования lubridate
функции + dplyr
на PostgreSQL безуспешно. Случайно я нашел простое решение, используя функции СУБД непосредственно на dbplyr
кодирование.
Извините, я буду использовать пример PostgreSQL, потому что я не знаю о функциях сервера SQL. В этом примере я создам временную таблицу в СУБД PostgreSQL, затем вычислю новый столбец с помощью функции to_date()
Предоставлено PostgreSQL. Результатом является дата, которую искали:
# Easy example on postgreSQL
library(tidyverse)
library(dbplyr)
library(RPostgreSQL)
con <- dbConnect(PostgreSQL(),
dbname="postgre",
host="localhost",
port=5432,
user="user",
password="pass")
date <- data_frame(date_str = c("20180212", "20180213"))
dbWriteTable(con, "tmp", date, temporary = TRUE)
tbl(con, "tmp") %>%
# The DBMS function is used here
mutate(date = to_date(date_str, "YYYYMMDD")) %>%
# Finally, I collect the data from database to R session
collect()
#># A tibble: 2 x 3
#> row.names date_str date
#>* <chr> <chr> <date>
#>1 1 20180212 2018-02-12
#>2 2 20180213 2018-02-13
Вы можете попробовать с настройками для SQL Server
и CAST()
функция может конвертировать ваши строки в дату, как объясняется в этом ответе. Я надеюсь, что это поможет вам.
Я надеюсь, однажды dplyr/dbplyr
можно перевести lubridate
функции в SQL
запросы.