让我们假设考勤表有以下列:,这两个列的数据类型都是DATETIME
例如,锁定的列有以下行:2016-01-01 09:30:00.000和2016-02- 08:10:00.000。
例如,Clocked列有以下行:2016-01-01 18:30:00.000和2016-02-01 18:20:00.000
现在我要计算时钟和时钟之间的时间差,它将以H:MM格式显示输出。
更清楚的是,时钟锁定(2016-01 18:30:00.000) -锁定(2016-01- 09:30:00.000)应该显示输出为9.00。
时钟锁定(2016-02-01 18:20:00.000) -时钟(2016-02- 08:10:00.000)应将输出显示为10:10
9:00和10:00表示员工在该特定日期内工作或参加的时数。
我尝试了SELECT时钟锁定-选择从出席,但它没有工作。
怎么才能解决呢?
发布于 2022-03-25 22:08:34
有点令人费解,但有效:
SELECT * , SUBSTRING(CAST(CAST([Clocked Out] - [Clocked In] as time(0)) as CHAR(8)), 1, 5)
FROM Attendance
小提琴演示
没有前导零的(甚至更复杂):
SELECT * ,
REPLACE(LTRIM(SUBSTRING(REPLACE(CAST(CAST([Clocked Out] - [Clocked In] as time(0)) as CHAR(8)), '0', ' '), 1, 5)), ' ', '0')
FROM Attendance
小提琴更新
解释
CAST
日期/时间差为time(0)
,即hh:mm:ss
CAST
为8-字符字符串- CHAR(8)
。REPLACE
所有零SUBSTRING
(hh:mm
)LTRIM
删除前导空格(在步骤3中创建)REPLACE
所有剩余的零空间(恢复非前导零)步骤3和步骤4可以互换。
https://stackoverflow.com/questions/71623298
复制相似问题