【问题标题】:How can i pull only Hour Number with AM/PM in SQL SERVER如何在 SQL SERVER 中仅使用 AM/PM 提取小时数
【发布时间】:2020-01-30 10:46:12
【问题描述】:

我的意见:

2020-01-01 09:01:00.000
2020-01-03 18:01:00.000

我的输出应该是这样的:

9 AM
6 PM

【问题讨论】:

  • 输入是什么? datetimedatetime2 值?
  • 我要小时数
  • 这在问题中很明显。 input 是什么?如果是与日期相关的类型,则大多数答案中不需要CAST( as datetime)CAST( as TIME) 表达式
  • 如果你想要“小时数”,试试DATEPART( hour, time_field)...

标签: sql sql-server tsql date


【解决方案1】:

只要您使用的是 SQL Server 2012 或更高版本,就可以使用这样的格式化函数。

SELECT FORMAT(GETDATE(),'h tt') AS MyTime

注意使用小写字母“h”表示 12 小时制时钟,没有前导零,“HH”表示两位数的 24 小时制时钟,因此您最终会得到类似“16 PM”的输出。

【讨论】:

    【解决方案2】:

    如果输入是与日期相关的类型,您可以使用FORMAT 和适当的格式字符串,例如:

    SELECT FORMAT(getdate(), 'HH:mm tt')
    

    对我来说,这会返回:

    12:51 PM
    

    只需HH tt 返回所需的字符串,在这种情况下:

    12 PM
    

    【讨论】:

    • 它在 ssms 中工作正常,但在 SSRS 中无法识别 FORMAT 函数:(
    【解决方案3】:

    你可以做转换:

    SELECT CONVERT(varchar(10), CONVERT(TIME, '2020-01-01 09:01:00.000'), 100)
    

    【讨论】:

      【解决方案4】:

      我愿意:

      SELECT V.YourColumn,
             LTRIM(SUBSTRING(ca.v,13,2) + ' ' RIGHT(ca.v,2))
      FROM (VALUES(CONVERT(Datetime2(3),'2020-01-01 09:01:00.000')),
                  (CONVERT(Datetime2(3),'2020-01-03 18:01:00.000')))V(YourColumn)
           CROSS APPLY (VALUES(CONVERT(varchar(30),V.YourColumn,0))) ca(v);
      

      CROSS APPLY我将日期时间转换为MMM d YYYY h:mmAM/PM的格式,然后你可以使用SUBSTRING/LEFT得到你想要的位。

      另一种方法是使用DATEPART

      SELECT CONCAT(CASE DATEPART(HOUR,V.YourColumn) WHEN 12 THEN 12 WHEN 0 THEN 12 ELSE DATEPART(HOUR,V.YourColumn) % 12 END,' ', RIGHT(CONVERT(varchar(30),V.YourColumn,0),2))
      FROM (VALUES(CONVERT(Datetime2(3),'2020-01-01 09:01:00.000')),
                  (CONVERT(Datetime2(3),'2020-01-03 00:01:00.000')),
                  (CONVERT(Datetime2(3),'2020-01-03 18:01:00.000')))V(YourColumn);
      

      因为12 % 120 % 12 都=0,所以你需要CASE 表达式来处理这些。

      【讨论】:

        【解决方案5】:

        您的查询。

        SELECT convert(VARCHAR(30), cast('2020-01-01 09:01:00.000' AS DATETIME), 100)
            ,convert(VARCHAR(30), cast('2020-01-03 18:01:00.000' AS DATETIME), 100)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-13
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 2018-08-16
          • 2023-03-16
          • 1970-01-01
          相关资源
          最近更新 更多