我创建了一个如下函数,其中我将日期作为varchar传递,它应该返回如下所示的值。但它的抛出转换错误。请帮忙。
CREATE FUNCTION dbo.MyFunction3(@dateValue varchar) RETURNS varchar
AS
BEGIN
DECLARE @retval varchar(30)
set @retval=FORMAT(CAST(@dateValue as datetime) - CAST('04:00' AS datetime),'yyyy-MM-dd HH:mm:ss')
RETURN @retval
END
go
编译成功。.
当我跑select dbo.MyFunction3('2010-10-14 12:55:13'),
它给出的错误为
从字符串转换日期和/或时间时转换失败。
请协助..
一个著名的陷阱是在指定varchar
时没有声明长度。如果未定义长度,则默认为 1。这意味着您只将值2
发送到函数,其余值将被截断。解决方案只是指定一个长度:
CREATE FUNCTION dbo.MyFunction3(@dateValue varchar(19)) RETURNS varchar(19)
create FUNCTION dbo.MyFunction3(@dateValue varchar(50)) RETURNS varchar(50)
AS
BEGIN
DECLARE @retval varchar(30)
set @retval=FORMAT(CAST(@dateValue as datetime) - CAST('04:00' AS datetime),'yyyy-MM-dd HH:mm:ss')
RETURN @retval
END
go
select dbo.MyFunction3('2010-10-14 12:55:13.000')