【问题标题】:Formatting date in SQL?在 SQL 中格式化日期?
【发布时间】:2011-11-07 18:32:51
【问题描述】:

我希望我的日期是 YYYY-MM-DD (DD-MM-YYYY),我似乎无法转换成这种形式。我已经看过CAST and Convert T-SQL

作为一般问题,我可以根据需要格式化日期,例如 DD-MM (YEAR) 等。您可以在 MYSQL 中轻松完成。

SELECT GETDATE() // start with this query

【问题讨论】:

  • 作为一般答案,不要在 SQL 中格式化,在前端、报表编写器等中进行格式化。

标签: sql sql-server-2005 datetime formatting


【解决方案1】:

获取没有时间的日期:

--char(10) limits the length to 10 characters thereby removing the time stamp
SELECT CONVERT(char(10), GetDate(),126) -- Output: 2011-11-07

获取带有时间戳的日期:

SELECT CONVERT(VARCHAR, GetDate(), 126) --Output: 2011-11-07T13:42:25.913

请参阅MSDN docs 了解所有可能的格式。

【讨论】:

  • 顺便说一句,我可以根据我的需要格式化它,比如 DD-MM(YYYY)
  • 现在我明白了它的逻辑,使用 varchar(10),其余数据被忽略。应该有人解释一下:)
【解决方案2】:
SELECT CONVERT(VARCHAR(19), GETDATE(), 120) /*YYYY-MM-DD HH:MI:SS(24h)*/

SELECT CONVERT(VARCHAR(23), GETDATE(), 126) /*YYYY-MM-DDTHH:MM:SS:MMM*/

SELECT CONVERT(VARCHAR(10), GETDATE(), 102) AS [YYYY.MM.DD]

SELECT CONVERT(VARCHAR(10), GETDATE(), 111) AS [YYYY/MM/DD]

【讨论】:

    【解决方案3】:

    试试格式120:

    SELECT CONVERT(VARCHAR, GETDATE(), 120) -- result: 2011-11-07 13:48:45
    

    如果您想截断它以便只返回日期部分,请在 VARCHAR 转换上指定大小约束:

    SELECT CONVERT(VARCHAR(10), GETDATE(), 120) -- result: 2011-11-07
    

    【讨论】:

      【解决方案4】:

      这绝对不是最快的选择,但它符合您的要求,并且将来可能对其他人有用。

      DECLARE @date DATETIME
      SET @date = GETDATE()
      SELECT CAST(DATEPART(YYYY, @date) AS NVARCHAR(4)) + '-' 
       + CAST(DATEPART(MM, @date) AS NVARCHAR(2)) + '-'
       + CAST(DATEPART(DD, @date) AS NVARCHAR(2)) + ' ('
       + CAST(DATEPART(DD, @date) AS NVARCHAR(2)) + '-'
       + CAST(DATEPART(MM, @date) AS NVARCHAR(2)) + '-'
       + CAST(DATEPART(YYYY, @date) AS NVARCHAR(4)) + ')' 
      

      它输出:

      2011-11-7 (7-11-2011)
      

      【讨论】:

        猜你喜欢
        • 2021-11-26
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多