创建功能日期

时间:2014-04-24 08:01:42

标签: sql-server-2008

我试图用2个参数创建一个函数。 第一个参数是日期 第二个是int

What i want the function to do:

Function('2014-04-20', 5) results in '2013-11-20'
Function('2013-11-10', 2) results in '2013-09-10'

CREATE FUNCTION MonthDiff(
            @in_date DATE
           ,@in_mn_adjust INT)
            RETURNS DATE
AS
BEGIN
            DECLARE @in_new DATE;

            SET @in_new = DATEADD(MM, -@in_mn_adjust, @in_date);


            RETURN @in_new;
END;

我跑了选择dbo.monthdifference(' 2014-04-22',3)。我收到的错误是从字符串转换日期和/或时间时转换失败。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

使用以下代码解决您的问题。


Declare @str Varchar(10)

Declare @result Varchar(10)

set @str= '2012/10/23'

set @result = DATEADD(MONTH,-2,CONVERT(date,@str,102))

答案 1 :(得分:0)

有时,SQL Server会做一些愚蠢的事情并误解一些日期字符串 1 。以下格式始终安全。我相信在处理较新的datetimedatetime2类型时,还有一些其他格式也是安全的,但我倾向于安全地使用它:

YYYYMMDD
YYYY-MM-DD'T'hh:mm:ss
YYYY-MM-DD'T'hh:mm:ss.mil

所以试试:

select dbo.monthdifference('20140422', 3)

(我的示例格式中的' T'是文字字符T,用作分隔符,而不是空格,而不是那些格式字符串中的其他字符。占位符,例如2014-04-24T09:23:00是我列出的一种安全格式)


1 例如,如果您的语言设置为英语,则会解释nnnn-nn-nn,其中所有n都是数字,为YYYY-DD-MM格式 - 尽管事实上,我怀疑英国有人会尝试这样的解释。