比较datetime2时,SQL忽略纳秒

Xtr*_*mer 4 sql sql-server datetime2

我有2个表,datetime2每个表都有一个字段.其中一个表也存储了纳秒,而另一个表只存储了几毫秒(没有办法改变这些数据).现在我想比较2个表并检查datetime2值是否匹配,但我必须忽略这个纳秒.

样本数据:

Table1                         Table2

2018-01-24 10:51:23.9976180    2018-01-24 10:51:23.9970000
2018-01-24 10:51:23.9976180    2018-01-24 10:51:23.9970000
2018-01-24 11:08:23.2578500    2018-01-24 11:08:23.2570000
Run Code Online (Sandbox Code Playgroud)

我的查询目前看起来像这样:

select t1.* from Table1 t1, Table12 t2 where t1.tradeDateTime = t2.tradeDate
Run Code Online (Sandbox Code Playgroud)

你可以猜到,我没有得到这些例子的任何结果,因为纳秒不同.

所以我的问题是,如何忽略where-clause中的纳秒?

编辑:

我知道我应该使用正确的JOINs.这个查询只是为了测试我在查询中是否犯了错误JOIN

Tan*_*ner 7

这一切都取决于您想要使用的精度.你想只匹配日期部分或没有毫秒的日期和时间吗?

以下是一些更改数据精度的方法:

CREATE TABLE #dates ( val DATETIME2 );

INSERT INTO #dates ( val ) VALUES ( SYSDATETIME());   
INSERT INTO #dates ( val ) VALUES ( SYSDATETIME());    
INSERT INTO #dates ( val ) VALUES ( SYSDATETIME());

SELECT d.val AsOriginalValue ,
       CAST(d.val AS DATETIME) AsDateTime ,
       CAST(d.val AS DATETIME2(0)) AsDateTime2_0 ,
       CAST(d.val AS DATE) AsDate
FROM   #dates AS d;

DROP TABLE #dates;
Run Code Online (Sandbox Code Playgroud)

结果是:

AsOriginalValue             AsDateTime              AsDateTime2_0             AsDate
--------------------------- ----------------------- ---------------------- ----------
2018-01-25 14:35:14.3660549 2018-01-25 14:35:14.367 2018-01-25 14:35:14    2018-01-25
2018-01-25 14:35:14.3665552 2018-01-25 14:35:14.367 2018-01-25 14:35:14    2018-01-25
2018-01-25 14:35:14.3670555 2018-01-25 14:35:14.367 2018-01-25 14:35:14    2018-01-25
Run Code Online (Sandbox Code Playgroud)

注意:小心四舍五入.