Изменить время атрибута datetime - PullRequest
0 голосов
/ 01 февраля 2010

У меня есть этот запрос:

select id from table where date >= @idate

Я хочу установить время атрибута даты в where = 00:00

Как это сделать?

Ответы [ 3 ]

1 голос
/ 01 февраля 2010

Лучше всего использовать сканирование диапазона. Зачем вам нужно изменить значение, хранящееся в столбце? Если вы хотите найти все, что произошло 2009-09-15 (независимо от времени), вы можете сказать:

WHERE [date] >= '20090915'
AND [date] < '20090916';

Теперь вы все равно сможете использовать индекс для столбца [дата], если он существует, что, вероятно, следует использовать, если вы часто выполняете такие запросы. Преобразование в левой части приводит к запросам без SARGable, которые почти в одностороннем порядке снижают производительность.

Полезной ссылкой для ознакомления является статья Тибора о типах данных даты / времени, включая советы по запросам:

http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

Я также написал довольно длинную статью о том, как избежать плохой практики при запросах диапазонов дат:

0 голосов
/ 01 февраля 2010

Никогда не изменяйте информацию столбца, если в этом нет крайней необходимости - это вызывает полное сканирование таблицы и игнорирует индексы. Просто убедитесь, что @idate правильно.

0 голосов
/ 01 февраля 2010

1001 *, например *

CAST(CONVERT(VARCHAR(10), date, 120) AS DATETIME)

Обратите внимание, что это не будет эффективно использовать какой-либо индекс в поле даты, и поэтому вы можете увидеть низкую производительность, особенно при больших объемах данных.

Альтернативы могут быть:
- переоцените то, что вы пытаетесь достичь и как
- хранить элементы даты и времени в 2 отдельных индексируемых полях.

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