SQL到Oracle日期问题

SQL到Oracle日期问题,sql,sql-server,oracle,date,Sql,Sql Server,Oracle,Date,目前正在从SQL Server迁移到Oracle。我应该应用哪些最佳实践 我们还遇到了一些问题,比如dateadd函数在oracle中不起作用 MSSQL代码 USE [TEST] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[GET_MONTHS_LAST_DAY](@MON int) RETURNS DATETIME AS BEGIN RETURN DATEADD(dd, -DAY(DAT

目前正在从SQL Server迁移到Oracle。我应该应用哪些最佳实践

我们还遇到了一些问题,比如dateadd函数在oracle中不起作用

MSSQL代码

USE [TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GET_MONTHS_LAST_DAY](@MON int)
RETURNS DATETIME 
AS
BEGIN
RETURN DATEADD(dd, -DAY(DATEADD(m,1,getdate())), DATEADD(m,-MON+1,datediff(dd,0,getdate()))) 
END
已转换的Oracle

FUNCTION GET_MONTHS_LAST_DAY
(
  v_MON IN NUMBER
)
RETURN DATE
AS
BEGIN
   RETURN utils.dateadd('DD', -utils.day_(utils.dateadd('M', 1, SYSDATE)), utils.dateadd('M', -v_MON + 1, utils.datediff('DD', 0, SYSDATE)));
END;
创建或替换

FUNCTION GET_MONTHS_LAST_DAY
(
  v_MON IN NUMBER
)
RETURN DATE
AS
BEGIN
   RETURN utils.dateadd('DD', -utils.day_(utils.dateadd('M', 1, SYSDATE)), utils.dateadd('M', -v_MON + 1, utils.datediff('DD', 0, SYSDATE)));
END;

知道我为什么不能编译oracle函数吗?我在这里看到的唯一一件事是dateadd函数在oracle中不可用。谢谢。

您的脚本看起来像Oracle SQL Developer自动转换脚本

您需要生成包utils。您可以使用util窗口中的按钮“生成utils包”(捕获中的第二个按钮)


简单的谷歌搜索显示了大量与Oracle中SQL Server的
DATEADD
对应的示例。追溯到2007年,建议您使用
INTERVAL
literal。来自数据库SQL语言参考。我认为这个问题有很多重复之处,可能会引起讨论“我应该应用的最佳实践”,如果您添加了编译失败错误消息,我们可能会提供进一步帮助。创建下个月的日期和减去的日期会更容易,如果您想自己滚动,则会得到前一天的日期,但Oracle已经有了最后一天的功能: