Как сравнить два поля даты и времени в SQL Server 2005? - PullRequest
1 голос
/ 09 ноября 2008
DECLARE  @p_date DATETIME
SET      @p_date = CONVERT( DATETIME, '14 AUG 2008 10:45:30',?)

SELECT   *
FROM     table1
WHERE    column_datetime = @p_date

Мне нужно сравнить дату и время, как:

@p_date=14 AUG 2008 10:45:30
column_datetime=14 AUG 2008 10:45:30

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 09 ноября 2008

Вопрос неясен, но похоже, что вы пытаетесь выполнить равенство, которое не возвращает ожидаемые строки, поэтому я предполагаю, что проблема в том, что миллисекунды являются проблематичными. Здесь есть несколько подходов:

  1. форматировать оба значения (как varchar и т. д.) с использованием CONVERT: дорого ЦП, не может использовать индекс
  2. используйте DATEDIFF / DATEPART для выполнения математика - похоже, но не вполне как дорогой
  3. создать диапазон для поиска между

Третий вариант почти всегда является наиболее эффективным, поскольку он может эффективно использовать индексирование и не требует большой загрузки ЦП.

Например, в приведенном выше примере, поскольку ваша точность равна секундам *, я бы использовал:

DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)

затем добавьте ГДЕ формы:

WHERE column_datetime >= @p_date AND column_datetime < @end

Это будет работать лучше всего, если у вас есть кластеризованный индекс для column_datetime, но все равно должно работать, если у вас есть некластеризованный индекс для column_datetime.

[* = если @p_date включает в себя миллисекунды, вам нужно больше думать о том, следует ли обрезать эти мс с помощью DATEADD или делать меньший диапазон и т. Д.]

0 голосов
/ 09 ноября 2008

Я не совсем понимаю вашу проблему, но DateDiff может использоваться для сравнения дат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...