SQL时间戳比较和算术

时间:2016-05-19 17:44:55

标签: sql datetime timestamp

我试图通过连接到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分钟

2 个答案:

答案 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。