Intereting Posts
Безопасная нормализация данных с помощью SQL-запроса Объединение двух больших таблиц postgres с использованием int8range, не масштабирующихся хорошо Как вы можете увидеть sql, который вызывает ошибку в SubmitChanges в LINQ to SQL? найти все родительские записи, где все дочерние записи имеют заданное значение (но не только некоторые дочерние записи) Создание отчета по URL-адресу – SQL Server Reporting Services 2008 Каков наилучший способ представления отношения «многие ко многим» между записями в одной таблице SQL? Как конвертировать запрос SQL Query to Rails Active Record? Что такое оператор конкатенации строк в Oracle? INSERT, если нет Exist Mysql SQL: взорвать массив Таблица мутирует, триггер / функция может не видеть его (остановка среднего уровня от падения ниже 2,5) MySQL – Получить номер строки на выбранном Передача массива параметров хранимой процедуре MySQL groupwise MAX () возвращает неожиданные результаты Запросы DocumentDB с массивами

Datediff GETDATE Добавить

В этом типе кода,

AND Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -6), 0) 

Он должен был вытащить записи с датой 6 дней назад, до сегодняшнего дня. Как я могу заставить его снимать записи с 7 дней до вчерашнего дня?

Я знаю, что изменение от -6 до -7 приведет к записи записей с 7 дней назад, но какая переменная – конец диапазона дат, поэтому я могу изменить его на -1 ?

Это не свидание.

Условие, которое у вас есть, действительно есть только одно условие: больше. Правая сторона больше, чем 6 дней назад, поэтому ваше условие соответствует любой дате, которая была позже даты шесть дней назад. Другими словами, это не останавливается сегодня; он включает в себя завтра, на следующей неделе и в следующем году.

 AND ( Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -7), 0) AND Orders.ShipDate < DATEADD(Day, Datediff(Day,0, GetDate()), 0) ) 

Это то, чего вы действительно хотите. Он соответствует датам, которые были позже полуночи 7 дней назад, а также даты, которые до полуночи сегодня (что в любой момент вчера).

«Конец диапазона дат» не указан в вашем запросе.

Измените свой код на:

AND (Orders.ShipDate BETWEEN DATEADD (День, -1, GetDate ()) И DATEADD (День, -7, GetDate ()))

Это тоже должно работать, и это устраняет ненужное добавление 0 дней:

 select *,DATEDIFF(Day, orders.ShipDate, GETDATE()) AS DAYS_SINCE_TODAY from Orders where DATEDIFF(Day, orders.ShipDate, GETDATE()) >= 1 AND --This many days since today DATEDIFF(Day, orders.ShipDate, GETDATE()) <= 7 --Going back this many days 

Мне нравится функция МЕЖДУНАРОДНАЯ. Это может быть другой вкус SQL, чем вы используете, но это то, что я использую.

 BETWEEN dateadd(second, 0, dateadd(dd,datediff(dd,7,getdate()),0)) AND dateadd(second,-1, dateadd(dd,datediff(dd,0,getdate()),0))