小弟在 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 行受影响)
------解决方案--------------------
------解决方案--------------------
正解啊
------解决方案--------------------
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')