此处将SQL Server查询转换为Oracle特定案例

此处将SQL Server查询转换为Oracle特定案例,sql,oracle,Sql,Oracle,我正在将一个300行sql server查询转换为Oracle,有些语句让我卡住了,这里的任何帮助都将非常有用: 1. SELECT L_SPLIT_DATE = NULLIF(SPLIT_DATE, CONVERT(DATETIME, '20000101', 112)) + 1 FROM OGEN.GEN_P_ARCHIVE ----- Not sure about NULLIF and CONVERT. Datetime i think has to become DATE.

我正在将一个300行sql server查询转换为Oracle,有些语句让我卡住了,这里的任何帮助都将非常有用:

1. SELECT L_SPLIT_DATE = NULLIF(SPLIT_DATE, CONVERT(DATETIME, '20000101', 112)) + 1
    FROM OGEN.GEN_P_ARCHIVE

 ----- Not sure about NULLIF and CONVERT. Datetime i think has to become DATE.

2. IF @@ROWCOUNT = 0  

   ---- 2 "@' signs, do I just remove them both?

3. SET @L_EDT = DATEDIFF(dd, 0, DATEADD(dd, 0, @P_EDT)) + (@L_EDT - DATEDIFF(dd, 0, DATEADD(dd, 0, @L_EDT))) + CASE WHEN @L_SDT > @L_EDT THEN 1 ELSE 0 END;

DATEDIFF和DATEADD在Oracle中是相同的吗?

至于
SELECT

SELECT NVL(SPLIT_DATE, TO_DATE ('20000101', 'YYYYMMDD')) + 1 AS L_SPLIT_DATE FROM OGEN.GEN_P_ARCHIVE
至于
ROWCOUNT
,这有点复杂——没有上下文很难回答


至于
DATEDIFF
DATEADD
——在Oracle中,您只需使用
-
+
,Oracle将操作数分别解释为日期和“天数”(可以是浮点)。

这是一个查询吗?我对SQL Server了解不多,但您可能需要一个PL/SQL块

无论如何,对于查询,选择应如下所示,请注意别名L_SPLIT_DATE(不是分配):

对于ROWCOUNT,除非最后一条语句是update或delete DML,否则您必须以独立查询的形式执行该计数,但很抱歉,select语句不是这样

这里的问题是如果你有,作为一个过程性的指令,你必须知道如何用oracle来处理它,如果你不能用PL/SQL来处理它,你必须用一个存在的验证或子查询来解决它,如果你告诉我们在IF之后是什么,这将是很有帮助的

对于DATEDIFF,DATEADD我引用@Yahia

对于Oracle中的DATEDIFF和DATEADD-in,您只需使用-和+,Oracle将操作数分别解释为日期和“天数”(可以是浮点)


谢谢你的帮助。这样我就可以保留日期diff/add,或者我应该更改它们?@PinchasK使用
+
-
。表达式
L\u SPLIT\u DATE=…
在Oracle中无效。必须使用标准列别名
NVL(…)作为拆分日期
SELECT (NVL(SPLIT_DATE, TO_DATE('20000101', 'YYYYMMDD')) + 1) L_SPLIT_DATE FROM OGEN.GEN_P_ARCHIVE