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 запросы.

Другие вопросы по тегам