我试图用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)。我收到的错误是从字符串转换日期和/或时间时转换失败。
我做错了什么?
答案 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 。以下格式始终安全。我相信在处理较新的date
,time
和datetime2
类型时,还有一些其他格式也是安全的,但我倾向于安全地使用它:
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
格式 - 尽管事实上,我怀疑英国有人会尝试这样的解释。