【问题标题】:dateformat not as expected日期格式不符合预期
【发布时间】:2012-02-28 22:52:23
【问题描述】:

我下面有以下功能。

它返回一个日期,例如 2012 年 2 月 29 日晚上 10:00。有没有办法让它返回格式为 2/29/2012 10:00PM

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

【问题讨论】:

  • 我如何考虑UTC时间,例如这个函数将负责更新数据库中的表。根据安装程序的执行位置,我需要此函数返回 UTC 时间。

标签: sql sql-server tsql


【解决方案1】:

函数本身返回一个日期和时间,“Feb 29 2012 10:00PM”和“2/29/2012 10:00AM”只是该日期的字符串表示(我假设 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]

【讨论】:

  • [Date] 日期括号是什么意思?
  • 是列别名。这只是意味着列名显示为“日期”而不是“(无列名)”
【解决方案2】:

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

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

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

可以在on msdn 找到格式列表。如果你想要不同的格式,那么你需要做一些类似this question中讨论的事情

【讨论】:

  • 虽然,如果您在 SQL 中使用该函数,那么格式应该无关紧要。如果您将数据从 SQL 返回到您的程序,那么您的程序应该期望 SQL DateTime 类型,您可以在那里进行格式化
【解决方案3】:

只需更改\添加:

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

你可以在一行上做,当然,为了清楚起见,只是在 2 上做

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

【讨论】: