2015-10-09 5 views
-1

Я хочу сделать запрос, совместимый с Oracle SQL и PL/SQL. Я использую функцию Dateadd в SqlServer, которая несовместима для Oracle, там вы можете использовать ADD_MONTHS.Перенос Oracle SQL и Sql Server на новую дату

Sql Server:

DATEADD(MONTH, -1, GETDATE()) 

Oracle

to_date(ADD_MONTHS(SYSDATE,1),'DD-MON-YYYY')) 

Есть ли утверждение ANSI слить эти?

+0

Я не совсем понимаю ваш вопрос здесь. Что вы ищете точно? –

+0

Я хочу заменить эти утверждения тем, что работает на Oracle и на сервере Sql. – Jonas

+0

Думайте, что это невозможно. Как видите, есть две разные функции. – Tatiana

ответ

0

В качестве примера, вы можете создать эту функцию -

create or replace function dateadd(date_type varchar2, shift number, date_to_move date) return date is 
x date; 
begin 
if date_type = 'MONTH' then 
select to_date(add_months(sysdate,-1),'DD/MM/YYYY') 
into x 
from dual; 
end if; 
return x; 
end dateadd; 

, а затем следующий запрос будет работать в оракула -

select dateadd('month',-1,sysdate) 
from dual; 

тогда, конечно, вам все еще нужно то же самое для get_date , и у вас все еще будут определенные различия между обеими платформами, которые, вероятно, будут препятствовать запуску одного и того же кода на Oracle и SQL Server. В целом, решение @Boneist является наиболее подходящим для вашей проблемы.