Как я могу получить результат даты между сегодняшним днем ​​и 2 неделями - PullRequest
0 голосов
/ 22 марта 2020

У меня есть столбец DATE в SQL Сервер, заполненный примерами:

1978-03-22  
1984-04-01
1991-12-22
1986-03-31

Теперь я хочу получить все результаты за сегодня и до 14 дней. Поэтому должны отображаться записи

1978-03-22
1984-04-01
1986-03-31

.

Мой оператор SELECT выглядит следующим образом:

SELECT date_column FROM table WHERE CONVERT(varchar(7),date_column,100) BETWEEN CONVERT(varchar(7),DATEADD(DAY,-1,GETDATE()),100) AND CONVERT(varchar(7),DATEADD(DAY,14,GETDATE()),100)

Что не так, потому что я не получил результата из этого запроса .

Ответы [ 3 ]

0 голосов
/ 22 марта 2020

Создайте пропускную способность, которая переносит ваши даты на текущий год. Затем проверьте расстояние в днях от этой измененной даты.

select      date_column,
            distance
from        @table t
cross apply (select 
                anniversary = dateadd(year, year(getdate()) - year(date_column), date_column),
                yesterday = dateadd(day, -1, convert(date,getdate()))
             ) ap1
cross apply  (select distance = datediff(day, yesterday, anniversary)) ap2
where        ap2.distance between 0 and 14;

Кстати, вы упомянули, что хотите получить его с сегодняшнего дня до двух недель, но в вашем запросе есть оператор -1 dateadd. Поэтому я написал свой код со вчерашнего дня и до двух недель с сегодняшнего дня, но, конечно, вы можете изменить его по своему усмотрению.

0 голосов
/ 22 марта 2020

Кажется, вы хотите проверить только месяцы и дни. Следующее утверждение является возможным решением (просто обратите внимание, что вам нужна SQL Server 2012+ для функции DATEFROMPARTS()):

SELECT * 
FROM Data 
WHERE DATEFROMPARTS(YEAR(GETDATE()), MONTH(date_column), DAY(date_column)) 
   BETWEEN CONVERT(date, GETDATE()) AND CONVERT(date, DATEADD(day, 14, GETDATE()))   
0 голосов
/ 22 марта 2020

Кажется, есть две проблемы:

  • Если вы сравниваете с текущей датой и 14 днями с текущей даты, то она не вернет никакого результата, потому что в данных таблицы указано «Год» с 1978, 1984, 1986 и 1991 гг.
  • При сравнении даты используйте формат, состоящий из чисел (сравнение varchar может не дать правильных результатов).

попробуйте следующее:

SELECT date_column
FROM @tab
WHERE CONVERT(varchar(7),date_column,112) BETWEEN CONVERT(varchar(7),DATEADD(DAY,-1,GETDATE()),112) AND CONVERT(varchar(7),DATEADD(DAY,14,GETDATE()),112)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...