在 SQL 中以 H:mm 格式计算小时数

Counting hours in format H:mm in SQL

我有一个关于营业时间的专栏:

|time|
--------------
8:54
5:32
4:34
7:12
12:55
10:32
3:54
2:35

我想统计我有多少行超过 5 小时?小时格式的东西对我来说有问题..格式是varchar(文本)。

我该怎么做?有什么想法吗?

谢谢!

我做的有点棘手,但它奏效了:

WITH A AS (
    SELECT cast(substring(hours, 1, len(hours) -3) as INT) as TIME
    FROM your_table
              )

  SELECT count(*) as MORE_THAN_5_HOURS
  FROM A
  WHERE TIME >= 5

您删除作为小时的文本的最后 3 个字母(8:54 将变为 8) 然后将其转换为 INT,将所有操作放入名为 A 的 table 中。 然后计算 A 中 TIME 大于 5 的所有行。

另一种选择

Select Cnt = count(*)
 From  YourTable
 Where try_convert(decimal(10,2),replace([time],':','.')) > 5

结果

Cnt
5

请尝试以下解决方案。

  • 第一步:将数据转换为TIME(0)数据类型。
  • 第 2 步:通过 DATEPART(hour, ...) built-in 获取其中的小时部分 函数。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE  (ID INT IDENTITY PRIMARY KEY, hour_min VARCHAR(10));
INSERT INTO @tbl (hour_min) VALUES
('8:54'),
('5:32'),
('4:34'),
('7:12'),
('12:55'),
('10:32'),
('3:54'),
('2:35');
-- DDL and sample data population, end

-- just to see
SELECT * 
    , _hour = DATEPART(hour, TRY_CAST(hour_min + ':00' AS TIME(0)))
FROM @tbl;

-- real deal
SELECT [counter] = COUNT(*)
FROM @tbl
WHERE DATEPART(hour, TRY_CAST(hour_min + ':00' AS TIME(0))) >= 5;

结果

+---------+
| counter |
+---------+
|       5 |
+---------+