我有数据库表,其中有一个数据类型为OccurDate
的列DateTime
。
数据就是这样......
06-03-2013 06:47:49
06-03-2013 16:47:49
我必须找到InTime,OutTime,WorkDuration。
我正在使用像这样的查询
Min(convert(varchar(10),OccurDateTime,108)) AS InTime,
Max(convert(varchar(10),OccurDateTime,108)) AS OutTime,
但我在计算workDuration
时面临问题,因为
workDuration = 16:30:00 - InTime //16:30:00 means 4:30 pm
和银泰现在varchar(10)
因此无法从Datetime
中减去.......
我正在使用的查询..
SELECT UserID AS EmpCode,FirstName,LastName,Department,convert(varchar(10),OccurDateTime,103) AS Date,Min(convert(varchar(10),OccurDateTime,108)) AS InTime,
Max(convert(DateTime,OccurDateTime,108)) AS OutTime,
convert(varchar(10),(Max(convert(DateTime,OccurDateTime,108))- Min(convert(DateTime,OccurDateTime,108))),108) as Work,
FROM TTransactionLog1
WHERE convert(varchar(10),OccurDateTime,103) = '14/03/2013'
GROUP BY UserID, FirstName, convert(varchar(10),OccurDateTime,103),LastName,Department
所以你们有任何想法......
答案 0 :(得分:2)
您应该为Min/Max Dates
寻找Min/Max of varchar
而不是。因此,在将日期转换为varchar之前检查日期,并将它们转换为所需格式的最终内容。
此外,您必须使用Datediff
函数来获取 difference of Max and Min dates
,当您将字符串作为日期传递时,请使用ISO format
( {{ 1}} ) 'yyyymmdd'
。否则,您的查询可能无法在具有不同文化设置的服务器中运行。
我认为以下查询应该有效:
NOT culture specific
答案 1 :(得分:1)
WITH A AS (SELECT CONVERT(DATETIME, '16:25:00') InTime)
SELECT
CONVERT(varchar(10),CONVERT(DATETIME, '16:30:00') - InTime,108) workDuration
FROM A
输出:00:05:00
我相信双重转换可以让您在之后进行datetime
计算首先和convert
到varchar
。
答案 2 :(得分:0)
如果要计算两个日期时间之间的间隔,请使用datediff()。