dateformat与预期不符

时间:2012-02-28 22:52:23

标签: sql sql-server tsql

我在下面有以下功能。

返回2012年2月29日10:00 PM之类的日期。有没有办法让它返回格式为2/29/2012 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

3 个答案:

答案 0 :(得分:2)

函数本身返回日期和时间,“2012年2月29日10:00 PM”和“2/29/2012 10:00 AM”仅仅是该日期的字符串表示(我假设AM和PM开关是与问题无关,只是一个错误)。如果要将日期格式化为特定字符串,请查看CONVERT函数。 e.g:

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]

答案 1 :(得分:1)

如果要格式化DateTime,则需要将其作为VARCHAR而不是日期返回。如果声明一个FUNCTION返回DateTime,那么它将始终返回以标准SQL方式格式化的DateTime。

您可以使用sql CONVERT函数将其作为字符串返回:

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

可以找到格式列表on msdn。如果您想要不同的格式,那么您需要执行this question

中讨论的内容

答案 2 :(得分:1)

只需更改\添加此内容:

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

你可以在一行上制作它,当然,为了清晰起见,只做了2次

忘了添加你需要将return变量更改为varchar而不是datetime。 如果你不能这样做,也许你可以将转换添加到调用函数的地方(这肯定是最糟糕的)