Мне нужно поставить "if" в мое предложение where в моем заявлении select. Я просматриваю две даты и хочу вытащить данные между ними. Мне нужно проверить, отличается ли год, если месяц отличается, а затем и день. мой текущий оператор выбора:
select count(*)
from SOMT_Development.Board_Metrics_Data bmd
where bmd.Metric_Year >= startYear and bmd.Metric_Year <= endYear and
Metric_Month >= startMonth and Metric_Month <= endMonth and
bmd.Metric_Day >= startDay and bmd.Metric_Day <= endDay and
bmd.Board_Metrics_ID = 1 and bmd.Value_Colour = "Red" and
bmd.Date_Created = (select max(bmd2.Date_Created)
from SOMT_Development.Board_Metrics_Data bmd2
where bmd2.Board_Metrics_ID = bmd.Board_Metrics_ID and
bmd2.Metric_Year = bmd.Metric_Year and
bmd2.Metric_Month = bmd.Metric_Month and
bmd2.Metric_Day = bmd.Metric_Day
)) as 'red'
В настоящее время, если год и месяц совпадают в начале и конце даты, оператор работает. Однако, когда разные месяцы/годы отличаются, они работают неправильно. Это данные, которые возвращаются, если я вводю даты для 2018-3-1 и 2018-4-4
2018-03-29 09:46:20 green 1 no_comment 2018 3 1
2018-03-29 09:46:20 red 1 no_comment 2018 3 2
2018-03-29 09:46:20 white 1 no_comment 2018 3 3
2018-03-29 09:46:20 white 1 no_comment 2018 3 4
2018-04-04 13:25:19 green 1 no_comment 2018 4 4
2018-04-02 13:25:30 green 1 no_comment 2018 4 2
2018-04-03 13:25:47 green 1 no_comment 2018 4 3
Пожалуйста, не могли бы вы показать мне, как сделать выражение if, что если бы месяцы и годы были разными, они искали бы всю оставшуюся часть месяца.
Извините, если это простой вопрос.
Спасибо
Оператор IF
может использоваться только в процедурной синтаксисе, а не в выражении запроса в разделе where
. Хотя вы можете использовать инструкцию CASE
если это необходимо. Более того, не вижу ничего плохого в вашем текущем подходе
where
в основном является операторомif
: «включить строку в результат it ...». Как вы видите, что "поиск через остаток месяца" вещь?