2011-09-09 54 views
-2

我一直在写SQL Server中的用户定义函数:字符串转换为函数SQL Server日期时间

它看起来像这样:

CREATE FUNCTION FormatDate(@fromtime nvarchar(50)) 
RETURNS DATETIME 
AS 
BEGIN 

    DECLARE @tempfrom datetime 
    DECLARE @tempto nvarchar(50) 

    set @tempfrom = Convert(datetime, @fromtime, 100) 
    RETURN @tempfrom 

END 

select dbo.FormatDate('08/17/2010 4:30') 

当我尝试运行此,我得到的以下错误:

Conversion failed when converting the nvarchar value '08/17/2010 4:30' to data type int.

我在做什么错?

+1

为什么nvarchar?你会在你的日期字符串中有变音符号和日元符号吗? –

+0

否..它可以是varchar ...... – user838359

+0

是你没有使用正确的数据类型? – NullUserException

回答

1

你为什么要使用样式100?

CREATE FUNCTION dbo.FormatDate -- schema prefix always! 
(
    @fromtime VARCHAR(50) -- varchar 
) 
RETURNS DATETIME 
AS 
BEGIN -- don't need variables anywhere 
    RETURN(CONVERT(DATETIME, @fromtime)); 
END 
GO 
+0

我以后需要这些东西。这就是为什么我使用这些变量 – user838359

+0

后来在哪里?在函数中? –

+0

然而,我仍然得到相同的错误...当我运行代码 – user838359

2

您在convert中指定的100用于格式化选择数据时的格式,而不用于格式化数据存储。

日期时间只是存储为日期时间 - 就是这样(我的意思是,依赖于你的SQL设置,它可能是MM/DD/YYYY或DD/MM/YYYY)。

但如果你只是这样做:

set @tempfrom = Convert(datetime, @fromtime) 

它现在是一个日期,你可以在另一个转换包装转换到你想要的格式:

convert(varchar, convert(datetime, @fromtime), 100) 
+0

我仍然得到相同的错误 – user838359

+0

因为这是输出格式化的字符串。您需要选择是否要输出格式化的字符串或日期时间。然后该函数需要说RETURNS <该数据类型>并实际返回<该数据类型>。 –

相关问题