Як отримати поточну дату без часової частини


83

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

Відповіді:


119

Швидко , якщо вам доведеться перебрати і записи не мають дат в SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

Це два різні та чудові відповіді на StackOverflow: один , два

Конверсії Вархара - один з найгірших способів зробити це. Звичайно, для однієї вартості це може не мати значення, але це хороша звичка вступати.

Цей спосіб також є детермінованим, скажімо, якщо ви хочете проіндексувати обчислений стовпець. Навіть люди, які пишуть книги про 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)

Редагувати:

Як я вже говорив про детермінізм, варчарські методи не є безпечними, якщо ви не використовуєте стиль 112.

Інші відповіді тут вказують, що ви ніколи не застосовуватимете це до стовпця. Це правильно, але ви, можливо, захочете вибрати 100k рядків або додати обчислюваний стовпець або GROUP BY dateonly. Тоді вам доведеться скористатися цим методом.

Інша відповідь також зазначає стиль 110. Це не є безпечним для мови чи SET DATEFORMAT і не вдається встановити "британську" мову. Дивіться остаточний посібник щодо типів даних про дату Тибора Каразі.


1
За умови, що посилання є мертвим.
Viswanathan Iyer

6

Ви повинні перетворити його у varchar із зазначенням шаблону формату (у цьому випадку 110), а потім перетворити (або відкинути) назад у поточний час.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.