错误原因DateTime-varchar(10)

时间:2013-03-15 11:28:09

标签: sql sql-server-2005

我有数据库表,其中有一个数据类型为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

所以你们有任何想法......

3 个答案:

答案 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计算首先convertvarchar

答案 2 :(得分:0)

如果要计算两个日期时间之间的间隔,请使用datediff()。