Оператор EOMonth в предложении where - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь вытащить два столбца из одной таблицы, используя предыдущий месяц в качестве диапазона дат. Я чувствую, что я рядом. Когда я разбираю В следующем коде Management Studio (SQLServer2012) сообщается, что команды выполнены успешно. Когда я выполняю запрос, я получаю ответ: Msg 116, уровень 16, состояние 1, строка 3 В списке выбора можно указать только одно выражение, если подзапрос не введен с EXISTS.

Ниже приведен запрос ...

select  (column1), (column2)
from (table1)
WHERE (column2) IN  (SELECT DATEADD(DAY,1,EOMONTH(GETDATE(),-2)) AS StartDate, EOMONTH(GETDATE(),-1) AS EndDate)
order by (column2)

Предложение select dateadd само по себе успешно извлекает первый и последний день месяца ... Я не уверен, как использовать оператор EXIST ... надоело несколько разных вещей, но все выдало ошибки.

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Попробуйте использовать BETWEEN вместо IN():

SELECT column1, column2
FROM table1
WHERE column2 BETWEEN DATEADD(DAY,1,EOMONTH(GETDATE(),-2))
                  AND EOMONTH(GETDATE(),-1)

Редактировать: я хотел выделить BETWEEN специально, потому что этот вопрос заставил меня поверить, что была путаница между IN(), являющимся поиском в списке значений, а не "между" диапазоном значений.

BETWEEN сам по себе часто может вводить в заблуждение и может быть лучше понят, если переписать его в виде четкого диапазона, включающего основные операторы:

SELECT column1, column2
FROM table1
WHERE column2 >= DATEADD(DAY,1,EOMONTH(GETDATE(),-2))
AND column2 <= EOMONTH(GETDATE(),-1)
0 голосов
/ 07 мая 2018

Произведена корректировка в заявлении даты окончания. Сейчас я получаю данные с 4-1-2018 по 4-30-2018. Вместо <= до последней даты этого последнего месяца я использовал <первый день этого месяца Спасибо! </p>

ВЫБРАТЬ из имени, время завершения ОТ документов ГДЕ время завершения> = DATEADD (ДЕНЬ, 1, EOMONTH (GETDATE (), -2)) И время завершения

0 голосов
/ 07 мая 2018

Это то, что вы пытаетесь сделать?

select column1, column2
from table1
where column2 >= DATEADD(DAY, 1, EOMONTH(GETDATE(), -2)) and
      column2 <= EOMONTH(GETDATE(), -1) 
order by column2;

В вашем коде есть подзапрос, в котором нет необходимости.

...