Хобрук: Ваш путь к мастерству в программировании

SSRS: данные не возвращаются при использовании запросов даты

Если я использую это в своем наборе данных SQL:

DECLARE @StartDate DATE = '2018-01-01'
DECLARE @EndDate   DATE = '2018-03-01'

Отчет запускается и возвращает ожидаемые данные.

Когда я комментирую переменные @StartDate и @EndDate — удаляю два параметра из отчета — и запускаю отчет с помощью подсказок даты во время выполнения [используя те же даты] — я не получаю возвращаемых данных.

Поле даты, которое я пытаюсь отфильтровать, является полем даты и времени.

Я пробовал следующие два подхода в своем SQL:

o.ORDERDATE >= @StartDate And o.ORDERDATE <= @EndDate
cast(o.ORDERDATE as DATE) >= Cast(@StartDate As Date) And cast(o.ORDERDATE as DATE) <= Cast(@EndDate As Date)

Нет данных.

Я добавил текстовое поле в заголовок отчета и поместил туда значение параметра @StartDate и получил это: 01.01.2018 00:00:00 во время выполнения.

Я несколько раз переключался между раскомментированием и комментированием переменных даты в верхней части SQL. Когда я использую локальные переменные - я получаю данные. Когда я использую параметры даты - нет данных.

Я использую подсказки даты во многих других моих отчетах без проблем. Я вернусь и посмотрю, есть ли какие-либо из них в этой конкретной таблице и в этом конкретном поле даты - или какие-либо другие даты являются полями Datetime....

Между тем, я был бы признателен за любые предложения.

Спасибо!

06.04.2018

  • Я предполагаю, что ваши имена параметров StartDate и EndDate?.. Согласно вашему запросу, в именах не может быть пробелов. 07.04.2018
  • @BJones: Да. Нет пробелов. 07.04.2018
  • Возможно, было бы полезно опубликовать весь ваш запрос. 07.04.2018

Ответы:


1

Я бы заподозрил проблему преобразования, сравнивающую типы Date и DateTime. Чтобы доказать это, установите даты вручную в вашем запросе на полные дату и время. если это не дает результатов, попробуйте что-нибудь простое, например.

WHERE CAST(o.ORDERDATE AS Date) Between @StartDate AND @EndDate

Имейте в виду, что если вы начинаете дату с года (я думаю), по умолчанию это интерпретируется как формат ГГГГ-ММ-ДД.

07.04.2018
  • Не могли бы вы уточнить, как установить даты вручную в вашем запросе на полную дату и время. Какие даты вы предлагаете мне установить на полную дату и время? Спасибо! 09.04.2018
  • В тот момент, когда вы тестируете, вы устанавливаете дату, например, «2018-01-01». Установите для него значение «2018-01-01 12:00:00» или любую другую полную дату и время во время выполнения. Это только докажет, что преобразования даты и времени работают или не работают так, как вы ожидали. Вы пробовали предложенное изменение в вашем коде? Каковы результаты? 09.04.2018
  • Я только что попытался изменить параметры даты в SQL Server Management Studio на: ... StartDate Date = '2018-04-02 12:00:00' Declare EndDate Date = '2018-04-06 12:00:00' .. , и запрос по-прежнему работает нормально. [... Я не могу использовать символ «at» в окне комментариев]. 09.04.2018
  • В SSMS я также попытался установить диапазон дат в гггг-мм-дд чч:мм:сс... И... с помощью CAST(o.ORDERDATE AS Date). Запрос по-прежнему работает нормально в SSMS. Я попробую CAST(o.ORDERDATE AS Date) в SSRS и дам вам знать. Еще раз спасибо! 09.04.2018
  • Я думал, что ваше предложение CAST(o.ORDERDATE As Date) решило мою проблему. Однако, когда я сделал это и начал получать данные при использовании подсказок... потому что это не имело для меня никакого смысла - я попытался изменить SQL обратно на то, что было раньше - и это все еще работало. Итак, теперь он работает с ИЛИ без CAST(... As Date). Это похоже на то, что в SSRS был отключен переключатель, а теперь он «не отключен», и все работает так, как должно. Я хотел бы отметить ваше предложение как ответ, но я не знаю, насколько это будет точно. Какие-либо предложения? Спасибо за помощь! 10.04.2018
  • Это также может зависеть от дат, которые вы используете. Таким образом, 2018-01-01 всегда будет интерпретироваться как 1 января 2018 года, но 2018-03-01 может быть 1 марта 2018 года или 3 января 2018 года в зависимости от настроек локали/даты и времени. Поэтому проверьте, что ваши настройки даты и времени не были изменены, и повторите попытку с теми же данными и теми же датами, пока не найдете шаблон. Имейте в виду, что даты могут использоваться не так, как вы ожидаете (согласно моим комментариям только что). Удачи! 10.04.2018
  • Спасибо!! Я только что столкнулся с другим сценарием, когда у меня было подобное явление, но в SSMS, в запросе T-SQL. Как только я передал поле Datetime как Date, это сработало. Теперь я почти уверен, что ваше предложение было решением, и я отмечаю его как таковое. Спасибо!! 10.04.2018
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

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