«Как получить текущую дату, без учёта времени?»
Вариантов много, но хотелось бы их собрать все вместе:
1) Самый известный и документированный способ – это конвертация даты в строку в нужном формате и обратно в дату:
SELECT
CONVERT
( DATETIME,
(
VARCHAR
, GETDATE(), 112 ) )
DATEADD( d, DATEDIFF( d, 0, GETDATE() ), 0 )
( DATETIME, FLOOR(
FLOAT
, GETDATE() ) ) )
( DATETIME, ROUND(
, GETDATE() ), 0, 1 ) )
4) Четвёртый способ отталкивается от особенностей типа datetime. Выдержка из русскоязычного BOL: Значения типа datetime хранятся в виде 4-байтовых целых чисел. Первые четыре байта содержат количество дней до или после даты отсчета: 1 января 1900 года. Дата отсчета является системной датой. Вторые четыре байта содержат текущее значение времени, представленного в виде трехсотых долей секунды, прошедших после полуночи.
CAST
( GETDATE()
as
BINARY
(8) )
(4) )
DATETIME )
5) Пятый способ – это синтаксис OLE DB/ODBC, который SQL Server отлично понимает:
( DATETIME, {fn CURDATE()} )
( DATETIME, {fn
CURRENT_DATE
()} )
6) Тип данных date, новый тип данных, который появится в MS SQL Server 2008, сохраняет дату без компонента времени. Диапазон – от 1 января 0001 года до 31 декабря 9999 года (от 0001-01-01 до 9999-12-31). Каждая переменная даты требует трех байтов для хранения и имеет точность в 10 цифр. Точность типа данных ограничена отдельным днем.