2011-09-09 87 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 <該數據類型>並實際返回<該數據類型>。 –

相關問題