当前位置: 代码迷 >> Sql Server >> ORACLE语法转换成sqlserver,该如何解决
  详细解决方案

ORACLE语法转换成sqlserver,该如何解决

热度:60   发布时间:2016-04-24 10:19:18.0
ORACLE语法转换成sqlserver
小弟在 ORACLE写了一个小函数,但是在sqlserver里执行不了,小弟不怎么懂得sqlserver的语法,大家帮忙看看,给指正指正

CREATE OR REPLACE FUNCTION get_endyear(as_year varchar2)
RETURN varchar2
AS
v_year varchar2(4);
BEGIN
  select case when '2DB494F6CA4140BA9C2BF87BEEBAC16A'=as_year then  '2017'
else  getyear end into v_year from dual;
         return v_year;
END;


------解决方案--------------------

--楼主你oracle的函数就有语法错误啊

CREATE OR REPLACE FUNCTION get_endyear(as_year varchar2)
RETURN varchar2
AS
v_year varchar2(4);
BEGIN
  select case when '2DB494F6CA4140BA9C2BF87BEEBAC16A'=as_year then  '2017'
else  to_char(sysdate,'yyyy')   end into v_year from dual;
         return v_year;
END;

 Select stal.get_endyear('ABC') from dual

--
2014


------解决方案--------------------

create  FUNCTION [dbo].test 
(
@v_year varchar(20)
)
RETURNS char(20)
AS
BEGIN

declare @r varchar(20)
if( @v_year='2DB494F6CA4140BA9C2BF87BEEBAC16A' )
 set @r='2017'
else
set @r = Year(getdate())

return @r
END



select dbo.test('ABC')
--------------------
2014                

(1 行受影响)


------解决方案--------------------
引用:

create  FUNCTION [dbo].test 
(
@v_year varchar(20)
)
RETURNS char(20)
AS
BEGIN

declare @r varchar(20)
if( @v_year='2DB494F6CA4140BA9C2BF87BEEBAC16A' )
 set @r='2017'
else
set @r = Year(getdate())

return @r
END



select dbo.test('ABC')
--------------------
2014                

(1 行受影响)


------解决方案--------------------
引用:

--楼主你oracle的函数就有语法错误啊

CREATE OR REPLACE FUNCTION get_endyear(as_year varchar2)
RETURN varchar2
AS
v_year varchar2(4);
BEGIN
  select case when '2DB494F6CA4140BA9C2BF87BEEBAC16A'=as_year then  '2017'
else  to_char(sysdate,'yyyy')   end into v_year from dual;
         return v_year;
END;

 Select stal.get_endyear('ABC') from dual

--
2014



正解啊
------解决方案--------------------
use tempdb
go
/*
CREATE OR REPLACE FUNCTION get_endyear(as_year varchar2)
RETURN varchar2
AS
v_year varchar2(4);
BEGIN
  select case when '2DB494F6CA4140BA9C2BF87BEEBAC16A'=as_year then  '2017'
else  getyear end into v_year from dual;
         return v_year;
END;
*/
go
--轉換成SQL Server
if object_id('get_endyear') Is not null
Drop function get_endyear 
Go
create function get_endyear
(
@as_year nvarchar(50)
)
returns varchar(4)
as
begin
return(case @as_year when '2DB494F6CA4140BA9C2BF87BEEBAC16A' then '2017' else rtrim(year(getdate())) end)
end
go
--調用
select dbo.get_endyear('1')
select dbo.get_endyear('2DB494F6CA4140BA9C2BF87BEEBAC16A')
  相关解决方案