Запрос для получения данных за последние 3 месяца в SQL-команде SSIS

Привет, я разрабатываю пакет SSIS в VS2008 для SQL Server 2008.

Чтобы прочитать данные из источника, я добавил редактор исходного кода ADO.NET и написал ниже запросы в командном окне SQL, но получил ошибку.

Select * 
From Table 
Where CreatedDate Between DATEADD('d', -90, Date()) And Date()

Ошибка для приведенного выше SQL-запроса:

ОШИБКА [42000] [IBM i [Драйвер System i Access ODBC] [DB2 для i5 / OS] SQL0170 — количество аргументов для функции DATE недопустимо. (CWBODBC.DLL)

Select * 
From Table 
Where CreatedDate Between DateAdd('d', -90, GETDATE()) And GETDATE()

Ошибка для этого второго SQL-запроса:

ОШИБКА [42S02] [IBM] [Драйвер System i Access ODBC] [DB2 для i5/OS] SQL0204 — GETDATE типа *N в *LIBL не найден. (CWBODBC.DLL)

Есть ли кто-нибудь, кто может помочь мне написать запрос команды SQL, чтобы получить данные за последние 3 месяца?


person User5590    schedule 22.05.2017    source источник
comment
Какую ошибку вы получили?   -  person Tab Alleman    schedule 22.05.2017
comment
Не могли бы вы немного подробнее рассказать о последних трех месяцах, это последние 90 дней? или последние три месяца, исключая текущий месяц? или что-то другое??   -  person M.Ali    schedule 22.05.2017
comment
Это должны быть данные за последние 3 месяца, включая текущий месяц.   -  person User5590    schedule 22.05.2017
comment
Итак, вы берете данные из базы данных DB2? Это также заслуживает упоминания.   -  person Tab Alleman    schedule 22.05.2017
comment
Я извлекаю данные из SAP, устанавливая драйвер ODBC.   -  person User5590    schedule 22.05.2017
comment
Но где вы выполняете запрос? Sql-сервер или DB2?   -  person Juan Carlos Oropeza    schedule 22.05.2017
comment
Я выполняю этот запрос в команде SQL редактора исходного кода ADO .NET.   -  person User5590    schedule 22.05.2017


Ответы (3)


Судя по сообщению об ошибке, вы запрашиваете базу данных DB2 для IBM i V5. Действительно, в DB2 нет функции GETDATE(). DATEADD() тоже нет. Вместо этого вы подставляете значение из CURRENT DATE специального регистра ( переменная) и рассчитать диапазон следующим образом

SELECT * FROM Table 
WHERE CreatedDate BETWEEN CURRENT DATE - 90 DAYS AND CURRENT DATE
person mustaccio    schedule 22.05.2017
comment
Да, ты прав. Я заработал, сославшись на этот сайт: ibm.com/developerworks /data/library/techarticle/0211yip/ - person User5590; 24.05.2017

Попробуйте это. Вы получите данные за последние три месяца до текущей даты.

SELECT * FROM TABLE WHERE CreatedDate >= DATEADD(MONTH,-3,getdate()) 
person Community    schedule 22.05.2017
comment
Я попробовал это и получил ошибку: ОШИБКА [42S02] [IBM] [Драйвер System i Access ODBC] [DB2 для i5/OS] SQL0204 - GETDATE типа * N в * LIBL не найден. (CWBODBC.DLL) - person User5590; 22.05.2017

Попробуй это....

WHERE CreatedDate >= CAST(GETDATE() - 90 AS DATE) 
 AND  CreatedDate <= CAST(GETDATE() AS DATE); 

OR

WHERE CreatedDate >= CAST(DATEADD(MONTH, -3 , GETDATE()) AS DATE) 
 AND  CreatedDate <= CAST(GETDATE() AS DATE); 
person M.Ali    schedule 22.05.2017
comment
Получил ошибку как: ОШИБКА [42000] [IBM i [System i Access ODBC Driver] [DB2 для i5/OS] SQL0170 — количество аргументов для функции DATE недопустимо. (CWBODBC.DLL) - person User5590; 22.05.2017
comment
@ User5590 Если вы получаете данные из SQL Server 2008, используйте источник данных OLE DB вместо ado.net или ODBC. - person M.Ali; 22.05.2017
comment
Мои данные поступают из SAP через ODBC, и мне нужно импортировать их в SQL 2008. - person User5590; 22.05.2017
comment
Ничего из вышеперечисленного не работает. Получение неловкой ошибки как ОШИБКА [42S02] [IBM] [Драйвер System i Access ODBC] [DB2 для i5/OS] SQL0204 - GETDATE типа * N в * LIBL не найден. (CWBODBC.DLL) - person User5590; 22.05.2017