Получить последний день предыдущего месяца, который работает как для Oracle, так и для SQL Server - PullRequest
0 голосов
/ 18 декабря 2018

Я не уверен, что это возможно.Мне нужно написать запрос, который может работать как на Oracle, так и на SQL Server.Я пытаюсь получить последний день предыдущего месяца.

Например, если это 17 декабря, я бы хотел 30 ноября.

Я знаю, как сделать их по отдельности, но не могу придумать, как это работает с обоими.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Для SQL Server (alt):

SELECT DATEADD(mm,DATEDIFF(mm,0,CURRENT_TIMESTAMP),0)-1
0 голосов
/ 18 декабря 2018

Использовать один и тот же метод в SQL, который работает без изменений как в Oracle, так и в MS Sql Server?

Единственный способ, которым я вижу, - это использовать функцию, которая работает одинаково в обоих случаях.

Для этого вы можете создать функцию EOMONTH в Oracle.
Функция, которая работает так же, как существующая функция EOMONTH в MS Sql Server.

CREATE OR REPLACE FUNCTION EOMONTH (dt DATE, months SIMPLE_INTEGER DEFAULT 0) 
RETURN DATE IS
BEGIN
RETURN LAST_DAY(ADD_MONTHS(dt, months));
END;
/

Затем, чтобы получить последний день предыдущего месяца, вы можете получить EOMONTH на -1 месяц в обеих СУБД:

SELECT EOMONTH(col, -1) AS EndOfPreviousMonth FROM yourtable

Тест Oracle на дБ <>fiddle здесь

MS Sql Тест сервера на db <> fiddle здесь

0 голосов
/ 18 декабря 2018

разные СУБД имеют разные функции.Таким образом, вы не можете ожидать использования одного и того же запроса на SQL Server и Oracle

Для SQL Server

SELECT CONVERT(DATE, DATEADD(d, -( DAY(GETDATE()) ), GETDATE())

Для Oracle

SELECT LAST_DAY(ADD_MONTHS(yourdate,-1)) FROM DUAL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...