запрос по заданному диапазону дат, заставляющий год на основе месяца

#sql-server #powerbi #sql-server-2016

#sql-server #powerbi #sql-server-2016

Вопрос:

SQL Server 2016 — PowerBI

Мне нужно написать статический запрос, который будет использоваться в PowerBI для панелей мониторинга, которые автоматически обновляются, которые не получают никаких запросов, использующих бюджетный цикл наших компаний, который составляет с 1 июля по 30 июня. Я могу легко извлекать данные из таблиц, которые мне нужны, но я застрял в предложении where. Мне нужно, чтобы он запрашивал, чтобы показать мне записи, которые выполняются только между 7/1 / {год} — 6/30 / {год}. Есть ли способ запроса, который говорит, покажите мне все записи с датами между

(если месяц (getdate ()) в (1,2,3,4,5,6), то ‘7/1 /’ год (getdate ())) или иначе, если месяц (getdate ()) в (7,8,9,10,11,12), то ‘7/1 /’ год (dateadd(y,-1, getdate()))

и

(если месяц (Getdate ()) в (1,2,3,4,5,6′, то ‘6/30 /’ год (getdate ()) или иначе, если месяц (getdate ()) в (7,8,9,10,11,12), то ‘6/30 /’ год (datediff(y,1,getdate())))месяц (getdate()) в (1,2,3,4,5,6) затем ‘7/1 /’ год (getdate ()))

Если я напишу этот код в свой запрос, я получу сообщение об ошибке при преобразовании значения varchar ‘7/1 /’ в тип данных int . Я признаю, что это проблема с / в строке и пытаюсь присоединить значение int к varchar, но, похоже, я не могу понять, как пройти мимо этого. Я что-то упустил?

Ответ №1:

сначала вам нужно использовать YEAR(GETDATE()) как VARCHAR, что позволит вам объединить строку ‘7/1 /’ со значением year (string). Теперь у вас будет новая строка типа — «7/1/2020». Теперь снова приведите эту строку в качестве ДАТЫ, прежде чем применять другие условия. Это будет что-то вроде приведенного ниже-

 CAST('7/1/' CAST(YEAR(GETDATE()) AS VARCHAR) AS DATE)
  

Комментарии:

1. Приятно видеть, что это сработало. Вы также можете проголосовать, если это действительно помогло 🙂