我需要将下面的代码从SQL Server转换为Oracle:
Update A
Set
A.ShiftName=@ShiftName,
A.ShiftStartTime=DATEADD(day,DATEDIFF(day,0,AttendanceDate),
CAST(S.ShiftStartTime as varchar(8))),
A.ShiftEndTime=DATEADD(day,DATEDIFF(day,case when @ShiftName='NIGHT' then -1 else 0 end ,
AttendanceDate),CAST(S.ShiftEndTime as varchar(8))),
A.ModifiedBy=@UpdatedBy,
A.ModifiedOn=GETDATE()
from Attendance A left join ShiftMaster S on S.[Shift]=@ShiftName
where AttendanceId=@AttendanceId
字符串
1条答案
按热度按时间but5z9lq1#
在Oracle中:
DATEADD(day, ...)
应使用+
运算符实现DATEDIFF
应该使用-
运算符来实现(但是不清楚你试图通过查找0和日期之间的差异来实现什么)。[identifier]
是无效语法,如果标识符区分大小写,则应使用"identifier"
,如果不区分大小写,则应使用identifier
。@named_bind_variable
应该是:named_bind_variable
。GETDATE()
应该是SYSDATE
或TRUNC(SYSDATE)
(如果您想要当天的午夜)。CAST
将值转换为字符串,并尝试将字符串添加到日期中,因为您没有告诉我们列中保存的数据,但这看起来是错误的。这应该足够你修改自己的代码了。
你不想把你的代码转换成PL/SQL,因为PL/SQL是Oracle的过程语言。你想把它转换成Oracle的SQL方言(要求把它从SQL转换成Oracle SQL是没有意义的,你的意思可能是从SQL Server SQL转换成Oracle SQL)。