Как получить текущую дату без временной части

В SQL Server 2005 как получить текущую дату без временной части? Я использовал GETDATE (), но хотел бы, чтобы у него было время 00: 00: 00.0

75 голосов | спросил Piers Myers 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 17:32:56 +0300000000pmThu, 24 Feb 2011 17:32:56 +030011 2011, 17:32:56

2 ответа


107

самый быстрый , если вам нужно перебирать набор записей и не иметь даты в SQL Server 2008

SELECT DATEADD (день, DATEDIFF (день, 0, GETDATE ()), 0)

Два разных и отличных ответа на StackOverflow подтверждают это: Один , Два

Преобразования Varchar - один из худших способов сделать это. Разумеется, для одного значения это может быть неважно, но это хорошая привычка вступать.

Этот способ также детерминирован, скажем, если вы хотите индексировать вычисленный столбец. Даже люди, которые пишут книги о SQL Server, получают обнаруженные конверсии datetime

Этот метод также расширяем.

  • вчера: DATEADD (день, DATEDIFF (день, 0, GETDATE ()), -1)
  • начало месяца: DATEADD (месяц, DATEDIFF (месяц, 0, GETDATE ()), 0)
  • конец последнего месяца: DATEADD (месяц, DATEDIFF (месяц, 0, GETDATE ()), -1)
  • начало следующего месяца: DATEADD (месяц, DATEDIFF (месяц, 0, GETDATE ()), 31)

Edit:

Как я уже говорил о детерминизме, методы varchar небезопасны, если вы не используете стиль 112.

Другие ответы здесь указывают на то, что вы никогда не применяете это к столбцу. Это правильно, но вы можете выбрать 100k строк или добавить вычисляемый столбец или GROUP BY dateonly. Затем вы должны использовать этот метод.

В другом ответе также упоминается стиль 110. Это не язык, а SET DATEFORMAT безопасен и не работает с «британским» языковым настройком. См. окончательное руководство по datetime datatypes от Tibor Karaszi.

ответил gbn 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 22:46:34 +0300000000pmThu, 24 Feb 2011 22:46:34 +030011 2011, 22:46:34
5

Вам нужно преобразовать его в varchar, указав шаблон формата (в этом случае 110), а затем конвертировать (или отбрасывать) обратно в datetime.

выберите getdate (), cast (convert (varchar (10), getdate (), 110) как datetime)
ответил mrdenny 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 21:01:03 +0300000000pmThu, 24 Feb 2011 21:01:03 +030011 2011, 21:01:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132