В SQL Server 2005 как получить текущую дату без временной части? Я использую, GETDATE()
но хотел бы, чтобы время 00: 00: 00.0
источник
В SQL Server 2005 как получить текущую дату без временной части? Я использую, GETDATE()
но хотел бы, чтобы время 00: 00: 00.0
Самый быстрый, если вам нужно перебирать набор записей и не иметь даты в SQL Server 2008
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Это подтверждают два отличных ответа на StackOverflow: один , два
Преобразование Varchar - один из худших способов сделать это. Конечно, для одного значения это может не иметь значения, но это хорошая привычка.
Этот способ также является детерминированным, например, если вы хотите проиндексировать вычисляемый столбец. Даже люди, которые пишут книги о SQL Server, попадают в ловушку с преобразованием даты и времени
Эта техника также расширяема.
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
Редактировать:
Как я уже говорил о детерминизме, методы varchar небезопасны, если вы не используете стиль 112.
Другие ответы здесь указывают на то, что вы никогда не примените это к столбцу. Это правильно, но вы можете выбрать 100 тыс. Строк или добавить вычисляемый столбец или GROUP BY только для даты. Тогда вы должны использовать этот метод.
В другом ответе также упоминается стиль 110. Он не является безопасным для языка или SET DATEFORMAT и не работает с настройкой «британского» языка. Смотрите окончательный путеводитель по типам данных datetime от Tibor Karaszi.
Вы должны преобразовать его в varchar, указав шаблон формата (в данном случае 110), а затем преобразовать (или привести) обратно в datetime.
источник