【问题标题】:Date Time Formatting in SQLSQL中的日期时间格式
【发布时间】:2009-04-03 07:22:01
【问题描述】:

我需要以这样的方式编写 sql 查询,它会以以下格式检索日期 dd MM yyyy HH mm ss AM(或 PM)

例如 31 12 2009 12 45 06 安

【问题讨论】:

    标签: sql sql-server datetime formatting


    【解决方案1】:

    我建议在中间层/层或客户端格式化字符串。用各种格式化方法就简单多了……这是表示要求,那你为什么不在表示层格式化呢?

    【讨论】:

    • +1 不知道为什么应该降级。这是中肯的建议。
    【解决方案2】:

    你可以看看 MSDN 上的CAST and CONVERT

    SELECT CONVERT(VARCHAR(30), datetime_field, 130) AS formatted_date
    

    130 会将日期转换为以下格式:dd mon yyyy hh:mi:ss:mmmAM(或 PM)

    【讨论】:

    • HI 此格式在列表中不可用 dd MM yyyy HH mm ss AM(或 PM)
    • 我认为转换为日期时间样式 130 最接近您请求的日期
    【解决方案3】:

    这样就很难让它变得更低效了,但这里就是这样

    DECLARE @GetDate DATETIME
    SET @GetDate = '01-01-2009 13:10:20'
    SELECT 
      CAST(DATEPART(dd, @GETDATE) AS VARCHAR(2)) + ' '
      + CAST(DATEPART(mm, @GETDATE) AS VARCHAR(2)) + ' '
      + CAST(DATEPART(yyyy, @GETDATE) AS VARCHAR(4)) + ' '
      + CAST(DATEPART(hh, @GETDATE)%12 AS VARCHAR(2)) + ' '
      + CAST(DATEPART(mi, @GETDATE) AS VARCHAR(2)) + ' '
      + CAST(DATEPART(ss, @GETDATE) AS VARCHAR(2)) + ' '
      + CASE WHEN DATEPART(hh, @GETDATE) > 12 THEN 'AM' ELSE 'PM' END
    

    【讨论】:

    • 不应该是:CASE WHEN DATEPART (hh,@GETDATE)
    • @Zaagmans - 老实说,我不知道。上午/下午是我无法记住的事情之一。如果上午在中午之后,你是对的。如果下午过了中午,那你就错了
    【解决方案4】:

    如果您使用的是 SQL 2005 和 2008,一个好方法是编写一个 CLR 过程来为您进行格式化。 .NET 框架为各种数据类型提供了非常强大的格式化例程,当您想要在数据库级别进行格式化时,利用它们是有意义的。

    尽管这是否应该是这种情况当然值得商榷。鉴于数据库的主要工作是存储和检索数据,我可以理解 SQL Server 团队不向后弯腰以支持灵活格式化的理由。

    【讨论】:

      【解决方案5】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-09
        • 2012-06-27
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        相关资源
        最近更新 更多