I have 2 tables with a datetime2
field each. One of the tables has stored nanoseconds as well, while the other one only stores up to milliseconds (there is no way to change this data). Now I want to compare the 2 tables and check if the datetime2
values match, but I have to ignore the nanoseconds for this.
Sample data:
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
my query currently looks like this:
select t1.* from Table1 t1, Table12 t2 where t1.tradeDateTime = t2.tradeDate
As you can guess, I am not getting any results for these example, because the nanoseconds differ.
So my question is, how can I ignore the nanoseconds in the where
-clause?
Edit:
I know that I should use proper JOIN
s. This query was just to test if I made no mistakes in my query using JOIN
Cast the dates as
DateTime
as this will cast the value to only 3 decimal places. Also, please use proberJOINS
:This all depends on what precision you want to work with. Do you want to match just the date portion or the date and time without milliseconds?
Here's a few ways to change the precision of the data:
Results in:
NOTE: beware of rounding.
Using functions in the
WHERE
clause can cause performance problems. You might get better speed with a CTE approach:Whichever solution you use, I would definitely recommend using the explicit
JOIN
syntax and not the comma syntax. Final note, that joining on a datetime field isn't ideal to begin with so you may want to consider an approach that uses IDs in both tables.Try a CAST to DATETIME
A test