Servicenow - связанный сервер передает форматированную текущую дату в Openquery - PullRequest
0 голосов
/ 08 апреля 2020

Я подключил нашу базу данных ServiceNow как связанный сервер к серверу MS SQL через разъем ODB C. Я выполняю запрос каждый день, вручную вводя дату, теперь я хочу автоматизировать этот процесс, поэтому я пытаюсь передать CURRENT_DATE в предложении where, но у меня возникают проблемы с передачей даты в следующем формате (например, 2020-04-02 00 : 00: 00), я использовал DATE_FORMAT для форматирования даты, но выдает ошибку
OLE DB provider "MSDASQL" for linked server "SERVICENOW" returned message "[SN][ODBC ServiceNow driver][OpenAccess SDK SQL Engine]Unsupported scalar function:DATE_FORMAT.[10149]

Запрос, который я запускаю каждый день

SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE opened_at BETWEEN ''2020-04-02 00:00:00'' AND ''2020-04-02 23:59:59'')  

Ошибка автоматической выдачи запроса

SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE opened_at BETWEEN DATE_FORMAT(CURRENT_DATE, ''yyyy-MM-dd 00:00:00'') AND DATE_FORMAT(CURRENT_DATE, ''yyyy-MM-dd 23:59:59'');

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Я использовал следующий метод для решения этой проблемы, теперь он автоматизирован. Подчеркивающая база данных ServiceNow была MySQL.

DECLARE @date0 datetime,
        @date1 datetime;

SET @date0 = FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00');
SET @date1 = FORMAT(GETDATE(), 'yyyy-MM-dd 23:59:59');


SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE opened_at BETWEEN ''''' + FORMAT(CAST(@date0 as datetime), 'yyyy-MM-dd 00:00:00') + ''''' AND ''''' + FORMAT(CAST(@date1 as datetime), 'yyyy-MM-dd 23:59:59') + ''''' '')';
0 голосов
/ 08 апреля 2020

DATE_FORMAT и CURRENT_DATE не являются допустимыми SQL Функции сервера. Попробуйте это.

SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE CONVERT(DATE, opened_at) = CONVERT(DATE, GETDATE()')

Преобразование в тип данных DATE с помощью функции CONVERT () уберет время из обоих значений в opens_at и GETDATE ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...