Альтернатива для вычисления T-SQL на дату для предложения where - PullRequest
0 голосов
/ 23 марта 2012

У меня есть расчет данных SQL, который используется как часть предложения where для получения заказов с расчетной даты в полночь.

Мое решение:

bookDate >= (SELECT DATEADD(dd, -7, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)))

Оригинал:

bookDate >= DATEADD(dd, -7, GETDATE())

Однако возвращается в расчетную дату + текущее время

Есть ли альтернативный и гораздо более простой подход к этому?

Ответы [ 3 ]

1 голос
/ 23 марта 2012

Это немного проще.

bookDate >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()) - 7, 0)

В SQL Server 2008 и SQL Server 2012 вы можете использовать тип данных date.

bookDate >= DATEADD(dd, -7, CAST(GETDATE() as DATE))
0 голосов
/ 26 марта 2012

Вы также можете сделать это так:

bookDate >= CAST(CONVERT(char(8), GETDATE() ,112) as datetime)
0 голосов
/ 26 марта 2012

Следующее также будет работать для 2005:

SELECT DATEADD(dd, -7, FLOOR(CAST(GETDATE() AS FLOAT)))

Это работает, потому что SQL Server (и окна, в этом отношении) хранит дату в виде числа с плавающей запятой, причем целое число представляет количество дней01.01.1900, и часть дроби, представляющая время.Ниже короче и более соответствует тому, что я обычно использую в этой ситуации:

SELECT FLOOR(CAST(GETDATE() AS FLOAT) -7)

DATEADD полезен, если вы рассчитываете на что-то, кроме дней (то есть месяцев, лет), из-за различийколичество дней каждого месяца или года.При работе с днями часто проще добавлять или вычитать напрямую.Аналогичным образом, если вы хотите вычесть, например, два часа из даты, вы можете использовать:

SELECT CAST(GETDATE() AS FLOAT) * 2.0/24.0
...