【问题标题】:How to get time part from SQL Server 2005 datetime in 'HH:mm tt' format如何以“HH:mm tt”格式从 SQL Server 2005 日期时间获取时间部分
【发布时间】:2011-03-13 04:48:31
【问题描述】:

如何以HH:mm tt 格式从 SQL Server 2005 日期时间获取时间部分

例如

11:25 AM
14:36 PM

【问题讨论】:

  • 你为什么需要 HH:mm 格式的 AM/PM?
  • 看起来在您的应用程序代码中更容易实现。

标签: sql tsql sql-server-2005 time


【解决方案1】:

一种方法是:

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7))

如果您查看Books Online here,格式 100 是具有您想要的格式的时间元素的格式,这只是从前面剥离日期的情况。

【讨论】:

  • 这将打印 8:00 PM,但我认为问题正在寻找 20:00 PM
  • @Andomar - 好点。如果这确实是需要的,我认为 AM/PM 是无关紧要的,但建议采用更简洁的方法
【解决方案2】:

您需要两个转换,一个用于获取 HH:mm 时间,另一个用于获取 AM/PM。例如:

declare @date datetime
set @date = '20:01'
SELECT CONVERT(VARCHAR(5), @date, 108) + ' ' +
       SUBSTRING(CONVERT(VARCHAR(19), @date, 100),18,2)

打印出来:

20:01 PM

在选择查询中,将@date 替换为您的列名。

【讨论】:

  • 我会将 SubString() 和 Convert() 替换为单个 DatePart() 和 Case-Statement。这也将使您更好地控制 AM/PM 的大小写/大写。即 (CASE WHEN DATEPART(HOUR, GETDATE())
【解决方案3】:

SQL Server 2008

SELECT
CONVERT(TIME,GETDATE()) AS HourMinuteSecond,
CONVERT(DATE,GETDATE(),101) AS DateOnly
GO

结果

HourMinuteSecond: 13:06:56.5770000
DateOnly:         2012-07-26

SQL Server 2000/2005

SELECT
CONVERT(VARCHAR(8),GETDATE(),108) AS HourMinuteSecond,
CONVERT(VARCHAR(8),GETDATE(),101) AS DateOnly
GO

http://blog.sqlauthority.com/2009/08/06/sql-server-get-time-in-hourminute-format-from-a-datetime-get-date-part-only-from-datetime/

【讨论】:

    【解决方案4】:

    SQL Server 2008

    SELECT
    CONVERT(TIME,GETDATE()) AS HourMinuteSecond,
    CONVERT(DATE,GETDATE(),101) AS DateOnly
    GO
    

    结果:

    HourMinuteSecond: 13:06:56.5770000
    DateOnly:         2012-07-26
    

    SQL Server 2000/2005

    SELECT
    CONVERT(VARCHAR(8),GETDATE(),108) AS HourMinuteSecond,
    CONVERT(VARCHAR(8),GETDATE(),101) AS DateOnly
    GO
    

    【讨论】:

      【解决方案5】:
      select substring(CONVERT(VARCHAR, getdate(), 114),1,5)
      

      结果:22:05

      【讨论】:

        【解决方案6】:

        你需要使用CONVERT函数:

        CONVERT(VARCHAR, yourdatetimefiled, 114) AS [HH:MI(12H)]
        

        【讨论】:

        • 根据 MSDN,114 = hh:mi:ss:mmm(24h)
        • 但我想要 HH:mm tt 格式,它不提供像 AM 或 PM 这样的 tt 信息
        • 因为我目前没有 MSSQL 访问权限,所以我把答案写在心里。我相信 AdaTheDev 做对了。
        【解决方案7】:
        select cast(getdate() as time)) [time],
        

        【讨论】:

        • SQL Sevrer 2005 不支持Time 类型,所以这个答案是完全错误的。
        【解决方案8】:

        这会给你一个实际的日期时间而不是 varchar

        CAST(LEFT(YOURDATETIME,12) AS SMALLDATETIME) AS YOURNEWDATE
        

        【讨论】:

          【解决方案9】:
          select right(convert(char(20),getdate(),0),7)
          

          没有检查

          【讨论】:

            【解决方案10】:

            对于 SQL Server 2012 及更高版本,请使用:

            SELECT Format(GetDate(), 'hh:mm tt')

            【讨论】:

              猜你喜欢
              • 2017-09-03
              • 2012-05-08
              • 2011-12-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-06-02
              • 1970-01-01
              相关资源
              最近更新 更多