【问题标题】:SQL to Oracle Date IssueSQL 到 Oracle 日期问题
【发布时间】:2014-08-12 01:59:27
【问题描述】:

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

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

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;

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

【问题讨论】:

  • 简单的谷歌搜索显示了大量的样本与 SQL Server 在 Oracle 中的 DATEADD 对应物。可以追溯到 2007 年的 One of the samples 建议您使用 INTERVAL 文字。 Official documentation on using INTERVAL literals 来自数据库 SQL 语言参考。我认为这个问题有很多重复,可能会引起“我应该应用的最佳实践”的讨论,因此除非你改写它,否则应该以目前的形式关闭。
  • 如果您添加了编译失败错误消息,我们可能会提供进一步的帮助。
  • 如果您想自己滚动,创建下个月的日期和减去前一天的日期会容易得多,但 Oracle 已经有一个 LAST_DAY 函数:@987654324 @

标签: sql sql-server oracle date


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多