我试图通过连接到MS SQL DB服务器来查询和连接数据库中的两个表,其中两个表的时间戳相等(在'分钟'或"小时"精度)。
SELECT
M.TIME,
M.ERRORCODE,
A.TIME,
A.ASSAYNAME
FROM
MESSAGES M, ASSAYS A
WHERE
M.TIME = A.TIME
问题是两个表的TIME都像这种格式" 12/07/2015 12:00:12 AM"。我怎样才能让SQL只比较更宽松的时间范围内的时间,比如分钟或小时等级。
例如 分钟精度 " 12/07/2015 12:00:12 AM"将被视为等于" 12/07/2015 12:00:59 AM"
小时精度 " 12/07/2015 12:00:12 AM"将被视为等于" 12/07/2015 12:45:59 AM"
10分钟时的精确度 " 12/07/2015 12:00:12 AM"将被视为等于" 12/07/2015 12:09:59 AM"
我认为另一种提出这个问题的方法是"有没有办法通过算术来评估两个时间戳"像M.TIME - A.TIME< 10分钟
答案 0 :(得分:1)
在Microsoft SQL Server中,您可以看到两个日期时间值是否在10分钟之内,如下所示:
WHERE ABS(DATEDIFF(minute, M.TIME, A.TIME)) < 10
或者在彼此的10小时内这样:
WHERE ABS(DATEDIFF(hour, M.TIME, A.TIME)) < 10
答案 1 :(得分:1)
我建议您在尝试在date_time列类型上加入两个表时重新考虑您的意图,但是如果您必须...
(基于SQL Server的示例)
在比较之前,您只需要将两列都转换为通用格式。
SELECT
M.TIME,
M.ERRORCODE,
A.TIME,
A.ASSAYNAME
FROM MESSAGES M, ASSAYS A
WHERE CONVERT(VARCHAR, M.TIME, 101) = SELECT CONVERT (VARCHAR, A.TIME, 20)
如果要比较值是否属于某个范围,请使用DATEDIFF或DATEADD。