获取适用于Oracle和SQL Server的上个月的最后一天

时间:2018-12-17 21:59:03

标签: sql-server oracle datetime

我不确定是否可以。我需要编写一个可以在Oracle和SQL Server上运行的查询。 我正在尝试获取上个月的最后一天。

例如,如果是12月17日,我希望11月30日。

我知道如何单独进行操作,但是无法找出一种可以同时使用它们的方法。

3 个答案:

答案 0 :(得分:0)

不同的DBMS具有不同的功能。因此,您不能期望在SQL Server和Oracle上都使用相同的查询

对于SQL Server

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

对于Oracle

SELECT LAST_DAY(ADD_MONTHS(yourdate,-1)) FROM DUAL

答案 1 :(得分:0)

对于SQL Server(备用):

SELECT DATEADD(mm,DATEDIFF(mm,0,CURRENT_TIMESTAMP),0)-1

答案 2 :(得分:0)

要在SQL中使用在Oracle和MS Sql Server中都不变的相同方法?

我看到的唯一方法是使用一个在两个函数中都相同的函数。

为此,您可以在Oracle中创建EOMONTH函数。
一种与MS Sql Server中现有的EOMONTH函数相同的函数。

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

然后要获得上个月的最后一天,您可以在两个RDBMS中获得-1个月的EOMONTH:

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

db <>小提琴here

上的Oracle测试 在 db <>小提琴here

上的

MS Sql Server测试