ГДЕ оговорка в ОТКРЫТОМ ЗАПРОСЕ - PullRequest
0 голосов
/ 01 января 2019

Я создал процедуру в SQL Server 2012 с целью извлечения вчерашних данных из таблицы Oracle и вставки их в таблицу SQL Server с помощью OPENQUERY, например:

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
     DROP TABLE #Temp 

SELECT   
    LEAD(CONVERT(VARCHAR, CONVERT(DATETIME, '01-JAN-1970 03:00:00', 120) + [DAT_CLOSEDATE] / (24 * 60 * 60), 120), 1, CONVERT(VARCHAR, CONVERT(DATETIME, '01-JAN-1970 03:00:00', 120) + [DAT_CLOSEDATE] / (24 * 60 * 60), 120)) OVER (PARTITION BY [TXT_TICKETNUMBER] ORDER BY [DAT_CLOSEDATE]) AS [CLOSE_DATE]
INTO 
    #Temp
FROM
    OPENQUERY(ORACLE_DB, 'SELECT DAT_CLOSEDATE, TXT_TICKETNUMBER FROM SCHEME.TABLE')
WHERE       
    [DAT_CLOSEDATE] = DATEADD(d, -1, GETDATE()) 

Все работает какожидается, но проблема в синтаксисе SQL Server находится в предложении WHERE, поэтому я хочу сделать это внутри OPENQUERY, учитывая следующее:

  1. DAT_CLOSEDATE mustдинамически извлекать данные вчерашнего дня (сегодня-1)

  2. Тип данных столбца DAT_CLOSEDATE в Oracle: FLOAT и DATETIME в SQL Server

Я ожидаю, что синтаксис OPENQUERY будет выглядеть примерно так:

OPENQUERY(ORACLE_DB, 'SELECT DAT_CLOSEDATE, TXT_TICKETNUMBER   
                      FROM SCHEME.TABLE 
                      WHERE [DAT_CLOSEDATE] = DATEADD(d, -1, GETDATE())')

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Предположим, что DAT_CLOSEDATE столбец имеет значения типа с плавающей запятой, такие как 20181231202534, 20181231202713 ... , то есть они имеют тип yyyymmddhh24miss конвертируется из значения даты, где yyyy обозначает year, mm для месяца, dd для дня, hh24 для часа в диапазоне 00-23, miдля минуты, а ss для секунды.

В этом случае может быть вызван следующий блок :

OPENQUERY(ORACLE_DB, 'SELECT DAT_CLOSEDATE, TXT_TICKETNUMBER   
                        FROM SCHEMA.MYTABLE 
                       WHERE substr(DAT_CLOSEDATE,1,8) = to_char(sysdate-1,''yyyymmdd'')')

для получения значений предыдущего дня.

0 голосов
/ 01 января 2019

Если вы ищете эквивалент в Oracle, тогда:

where DAT_CLOSEDATE = sysdate-1

или

where DAT_CLOSEDATE = trunc(sysdate)-1

Вторая версия устанавливает время дня 00: 00: 00

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