2012-02-28 50 views
0

我在下面有以下功能。dateformat不如預期

它返回的日期類似Feb 29 2012 10:00 PM。有沒有一種方法,使其返回格式2012/2/29 10:00 PM

CREATE FUNCTION scrubDateString 
(
    -- Add the parameters for the function here 
    @inputDate varchar(150) 
) 
RETURNS DATETIME 
AS 
BEGIN 
    -- Declare the return variable here 
    DECLARE @Result DATETIME 

    -- Add the T-SQL statements to compute the return value here 
    DECLARE @tmpDate datetime 
    SET @Result = null 
    IF (ISDATE(@inputDate)=1) 
    BEGIN 
     SET @Result = DATEADD(HH, 5, @inputDate) 
    END 

    -- Return the result of the function 
    RETURN @Result 
END 
+0

我如何考慮UTC時間,例如此功能將負責更新數據庫表。基於安裝程序執行的位置,我需要使用此函數返回utc時間。 – Rod 2012-02-29 02:34:54

回答

2

該函數本身正在返回一個日期和時間,「Feb 29 2012 10: 00PM「和」2/29/2012 10:00 AM「僅僅是該日期的字符串表示(我假設AM和PM開關與問題無關並且只是一個錯誤)。如果要將日期格式化爲特定的字符串,請查看CONVERT函數。例如:

DECLARE @Date DATETIME 
SET @Date = scrubDateString(@YourString) 
SELECT CONVERT(VARCHAR, @Date, 101) + ' ' + RIGHT(CONVERT(VARCHAR, @Date, 0), 7) [Date] 

雖然我強烈建議將日期保留爲日期,並儘可能在應用程序端進行任何格式化。如果我假設錯了AM PM切換,你可以改變上面下面的代碼:

DECLARE @Date DATETIME 
SET @Date = scrubDateString(@YourString) 
IF (DATEPART(HOUR, @Date) > 12) 
    BEGIN 
     SET @Date = DATEADD(HOUR, -12, @Date) 
    END 
SELECT CONVERT(VARCHAR, @Date, 101) + ' ' + RIGHT(CONVERT(VARCHAR, @Date, 0), 7) [Date] 
+0

[Date]日期括號是什麼意思? – Rod 2012-03-13 15:21:15

+0

它是列別名。這只是表示列名稱顯示爲「日期」而非「(無列名稱)」 – GarethD 2012-03-13 15:32:06

1

如果要格式化一個DateTime你需要將其返回爲VARCHAR而不是作爲一個日期。如果你聲明一個FUNCTION來返回DateTime,那麼它總是會返回一個以標準SQL方式格式化的DateTime。

您可以通過使用SQL convert函數返回的是一個字符串:

RETURN CONVERT(varchar(500), @Result, 101) 

的格式列表可以發現on msdn。如果你想有一個不同的格式,那麼你就需要做一些像什麼在this question

+0

雖然,如果您在SQL中使用函數,那麼格式應該沒有關係。如果你將數據從SQL返回給你的程序,那麼你的程序應該預期SQL DateTime類型,你可以在那裏格式化 – Greg 2012-02-28 23:13:08

1

只是改變討論\補充一點:

SET @Result = DATEADD(HH, 5, @inputDate) 
SET @Result = CONVERT(VARCHAR(10), @Result , 101) + ' ' + RIGHT(CONVERT(VARCHAR, GETDATE(), 100), 7) 

你可以把它在同一行,當然,只是做了2清晰度

忘記補充說,您需要將返回變量更改爲varchar而不是datetime。 如果你不能這樣做,也許你可以將轉換添加到正在調用該函數的地方(肯定會是最糟糕的)