从字符串转换"2010-10-14 12:55:13"时转换失败



我创建了一个如下函数,其中我将日期作为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')

最新更新