SQL时间戳比较及其算法

SQL时间戳比较及其算法,sql,datetime,timestamp,Sql,Datetime,Timestamp,我试图通过连接到MS SQL DB服务器来查询和连接数据库中的两个表,其中两个表的时间戳相等(精度为“分钟”或“小时”) 问题是两张表的时间都是这样的格式“12/07/2015 12:00:12 AM”。我怎么能要求SQL只在更宽松的时间范围内比较时间,比如在分钟或小时级别 比如说 分钟级精度 “2015年7月12日12:00:12 AM”将被视为等同于“2015年7月12日12:00:59 AM” 小时级精度 “2015年7月12日12:00:12 AM”将被视为等同于“2015年7月12日1

我试图通过连接到MS SQL DB服务器来查询和连接数据库中的两个表,其中两个表的时间戳相等(精度为“分钟”或“小时”)

问题是两张表的时间都是这样的格式“12/07/2015 12:00:12 AM”。我怎么能要求SQL只在更宽松的时间范围内比较时间,比如在分钟或小时级别

比如说 分钟级精度 “2015年7月12日12:00:12 AM”将被视为等同于“2015年7月12日12:00:59 AM”

小时级精度 “2015年7月12日12:00:12 AM”将被视为等同于“2015年7月12日12:45:59 AM”

精确到10分钟 “2015年7月12日12:00:12 AM”将被视为等同于“2015年7月12日12:09:59 AM”


我想问这个问题的另一种方式是“有没有办法通过算术计算两个时间戳”,比如M.TIME-A.TIME<10分钟在Microsoft SQL Server中,您可以看到这两个日期时间值之间的距离是否在10分钟以内,如下所示:

WHERE ABS(DATEDIFF(minute, M.TIME, A.TIME)) < 10
WHERE ABS(DATEDIFF(hour, M.TIME, A.TIME)) < 10
其中ABS(DATEDIFF(分钟,M.TIME,A.TIME))<10
或者在10个小时内,像这样:

WHERE ABS(DATEDIFF(minute, M.TIME, A.TIME)) < 10
WHERE ABS(DATEDIFF(hour, M.TIME, A.TIME)) < 10
其中ABS(DATEDIFF(hour,M.TIME,A.TIME))<10

我敦促您在尝试连接日期时间列类型的两个表时重新考虑您的意图,但如果您必须

(基于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。

您使用的是哪一个数据库我想本主题可以帮助您:列的SQL数据类型是什么?数据库是Microsoft SQL server。对于“彼此相隔10小时内:其中ABS(DATEDIFF(分钟,M.TIME,a.TIME))<10”。你是说DATEDIFF(小时,M.TIME,A.TIME)我试过这个,但它抱怨DATEDIFF是不可识别的标识符。我想这是因为我正在连接一个Microsoft SQL server,我忘了提到它。我很抱歉。我确信
DATEDIFF
可以在Microsoft SQL Server上运行。例如:
选择DATEDIFF(hour,'5/22/2016','5/23/2016')
。感谢您的回答,但表A和表M中的时间值格式相同。我问的是如何在不同的精度级别进行比较。@ju no-ju,它们是相同的类型,但格式与类型不同。函数CONVERT将日期时间值格式化为您选择的格式(例如,不带毫秒的格式),并返回Varchar()类型的值,然后是比较中使用的结果Varchar(不带毫秒)。