Как получить текущую дату без временной части
В SQL Server 2005 как получить текущую дату без временной части? Я использовал GETDATE ()
, но хотел бы, чтобы у него было время 00: 00: 00.0
2 ответа
самый быстрый , если вам нужно перебирать набор записей и не иметь даты в 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.
Вам нужно преобразовать его в varchar, указав шаблон формата (в этом случае 110), а затем конвертировать (или отбрасывать) обратно в datetime.
выберите getdate (), cast (convert (varchar (10), getdate (), 110) как datetime)