我不确定是否可以。我需要编写一个可以在Oracle和SQL Server上运行的查询。 我正在尝试获取上个月的最后一天。
例如,如果是12月17日,我希望11月30日。
我知道如何单独进行操作,但是无法找出一种可以同时使用它们的方法。
答案 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测试