R: преобразование даты для использования в сценарии SQL - PullRequest
0 голосов
/ 05 октября 2018

Все, я не могу понять это после 5 часов попыток и поиска здесь на работе.

У меня есть R-скрипт, выполняющий SQL-скрипт.Я использовал пакет (infuser) для заполнения предварительно выбранных полей (начало) и (остановка) в моем сценарии SQL.

library(infuser)
SAPF1query <- infuse("SELECT TOP (1000) [PKID]
                ,[Equipment]
                ,[Order]
                ,[ActStartDate]
                ,[ActFinDate]
                ,[ActStartTime]
                ,[ActFinTime]
                FROM [sapData].[dbo].[SAP_IW_47]
                where Equipment IN ({{Feeder}}) 
                and OrdCat = 'ZWAR'
                and AcTyAct like '%TUT'

                and ActStartDate BETWEEN ({{start}}) AND ({{stop}})

                ", Feeder = WTGs, start = startdate, stop = stopdate)

Я добавляю следующие элементы: Feeder = WTGs, start = startdate, stop = enddate

Мои начальные даты и eddates выглядят так.

startdate <-'2018-08-01'  #enter START-dates for report by month
enddate   <-'2018-08-31'  #enter END-dates for report by month
      SD <- as.Date(startdate, tz="UTC")
      ED <- as.Date(enddate, tz="UTC")

Iпробовал оба вектора для начала и конца, чтобы влить в мой сценарий SQL, но безрезультатно.Я продолжаю получать ошибки, что SQL не может распознать даты начала и окончания.

Я пробовал другую версию as.POSIX, format.Date, но не могу ее получить.

Мой вектор даты выглядит так, когда я печатаю «2018-08-01».

Мне нужно, чтобы моя дата была в типе сценария SQL, например: «2018-08-01»

С этим форматом «ГГГГ-ММ-ДД» я могу влить в свой R/ SQL скрипт для фильтрации моего SQL-запроса.

Спасибо, Ваша помощь пока, но вот теперь моя ошибка SQL.Я постараюсь убедиться, что моя 64-битная версия верна и обновлена.Еще немного нового здесь и прошу прощения за ошибки.

РЕДАКТИРОВАТЬ 1:

Спасибо, Булат.Ваше предложение сработало, но я получаю эту ошибку сейчас.

  Error in executeQuery(conn, query, verbose, ...) : 
  22003 248 [Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of 
  the 
  nvarchar value '3000000001' overflowed an int column. 
  [RODBC] ERROR: Could not SQLExecDirect 'SELECT TOP (1000) [PKID]
            ,[Equipment]
            ,[Order]
            ,[ActStartDate]
            ,[ActFinDate]
            ,[ActStartTime]
            ,[ActFinTime]
            FROM [sapData].[dbo].[SAP_IW_47]

            where Equipment IN (84010,84039,84029,84031,84022,84032,84038,84025,84017,84014,84027,84011,84015,84044,84034,84041,84035,84040,84037,84013,84042,84043,84007,84004,84002,84036,84030,84026,84016,84020,84012,84019,84023,84024,84018,84028,84033,84021,84008,84003,84005,84006,84009) 
            and OrdCat = 'ZWAR'
            and AcTyAct like '%TUT'

            and ActStartDate BETWEEN '2018-08-01' AND '2018-08-31' 
            '

РЕДАКТИРОВАТЬ: 2 исправлена ​​ошибка mySQL.

Я исправил свою проблему с моими кодами ошибок, которые я получал.Это происходит потому, что в базе данных / таблице столбец [Equipment] хранится как символ, а не как целое число, как я обычно ожидаю.

Так что мне нужно было изменить переменную "WTGs", которая была числовым вектором,к символьному вектору в кавычках.

Я сделал это, заключив в кавычки отдельные элементы WTG с помощью '' или "".Мне пришлось взглянуть на функцию "shQuote", которая является частью базового пакета.Конечно, вы можете добиться этого только с помощью функций «вставки», но я считаю, что shQuote более понятен.

Мой оператор SQL должен выглядеть примерно так: **** WHERE [Equipment] IN ('8001', '8002', '8003')

Я использовал приведенный ниже код в R и включил его перед генерацией оператора "SAPF1query".

WTGs <- paste0(shQuote(WTGs, type = 'sh'), collapse = ",")

1 Ответ

0 голосов
/ 05 октября 2018

В запросе должно быть что-то вроде этого в предложении WHERE:

and ActStartDate BETWEEN '2018-08-01' AND '2018-08-31'

Для этого вам нужно использовать кавычки вместо скобок в шаблоне:

and ActStartDate BETWEEN '{{start}}' AND '{{stop}}'

...