Диапазон относительных дат в T-SQL - PullRequest
4 голосов
/ 10 января 2012

Я пытаюсь выбрать для всех элементов, где createDt находится в последние две недели.Я пробовал этот код, но он не работает.

SELECT * FROM dbo.mytable
WHERE CreateDt > dateadd(d,-15,CreateDt)

Может кто-нибудь сказать мне правильный способ сделать это?

Ответы [ 4 ]

9 голосов
/ 10 января 2012
WHERE CreateDt > dateadd(d,-15,CreateDt)

должно быть

WHERE CreateDt > dateadd(d,-15,getdate())

Предположительно.

Все NOT NULL значения CreateDt будут соответствовать вашему текущему состоянию, поскольку вы сравниваете столбец с его собственным значением минус15 дней - не 15 дней до текущей даты и времени.

2 голосов
/ 10 января 2012

Я верю, что это то, что вы хотите.

SELECT * FROM dbo.mytable
WHERE CreateDt > dateadd(wk,-2,getdate()) AND
      CreateDt < getdate() -- possible bad data
2 голосов
/ 10 января 2012

Вы проверяете, является ли CreateDt больше, чем за 15 дней до него. Я предполагаю, что вы получаете намного больше записей, чем ожидаете.

Я бы сделал что-то подобное (в первую очередь для удобства чтения)

Declare @CheckDate DateTime
Set @CheckDate = dateadd(d, -15, GetDate())

SELECT [Columns] from dbo.mytable WHERE CreateDt > @CheckDate

Кроме того - не забывайте вызывать ваши столбцы - не используйте «SELECT *» в обычных обстоятельствах.

2 голосов
/ 10 января 2012

"Где создан> (создан - 2 недели)"? Я так не думаю;)

Попробуйте это:

... where createdate > dateadd (d, -15, getdate())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...