Да, вам нужно сопоставить точность значения DateTime с миллисекундами, чтобы равенство работало.
Предложенная вами альтернатива будет работать.В качестве другой идеи вы можете использовать приведение и преобразование для усечения сохраненного вами времени до секунды.Однако обратите внимание, что использование этих функций в предложении where сведет на нет способность оптимизатора использовать любой индекс в столбце datetime.Вам нужно решить, какое влияние это окажет на вашу конкретную среду.
/* CONVERT style 20 is yyyy-mm-dd hh:mi:ss */
Select column1
From TABLE
where ForeignKey=1
and CAST(CONVERT(char(19),DateTime,20) as datetime) = '08/26/2010 11:24:36'
РЕДАКТИРОВАТЬ : После замечаний ниже я заметил, что SQL Server не выглядитподобрать разницу в 1 миллисекунду в сравнении.Это верно в условиях 2000/2005/2008.Если в 2008 году я использую новый тип данных datetime2 , он будет работать, как и ожидалось.При чтении с типом данных datetime точность миллисекундной части округляется:
Точность: округляется с шагом 0,00, 0,003 или 0,007 секунд
declare @datetime1 datetime
declare @datetime2 datetime
declare @datetime3 datetime
declare @datetime4 datetime
set @datetime1 = '2010-08-30 08:41:51.513'
set @datetime2 = '2010-08-30 08:41:51.513'
set @datetime3 = '2010-08-30 08:41:51.514'
set @datetime4 = '2010-08-30 08:41:51.515'
/* Expected result 'Equal'; Actual result 'Equal' */
if @datetime1 = @datetime2
print 'Equal'
else
print 'Not Equal'
/* Expected result 'Not Equal'; Actual result 'Equal' */
if @datetime1 = @datetime3
print 'Equal'
else
print 'Not Equal'
/* Expected result 'Not Equal'; Actual result 'Not Equal' */
if @datetime1 = @datetime4
print 'Equal'
else
print 'Not Equal'