SQL Где пункт - способ сокращения кода для нескольких дат? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть довольно простое предложение where - оно предназначено для получения ссуд, которые в самый последний день обработки просрочили 42 дня по сравнению с предыдущим днем ​​обработки.С тех пор я узнал, что мне нужно получить кредиты, срок погашения которых составляет 175 дней, НО также кредиты, срок погашения которых составляет 175 дней, или 350 (175 x 2), 525, 700 и т. Д. Это разделмое текущее предложение where с тремя интервалами дат, но буквально оно должно выходить за рамки этого (с интервалами в 175 дат), но перед тем, как ввести все эти дополнительные 175-дневные приращения, я подумал, что должен быть более краткий способ указания напо крайней мере, несколько приращений 175 дней после 350:

  Where
  ( 
     (ISNULL(li.PDDAYSREG,0) >= 42  
  and ISNULL(ld.PDDAYSREG,0) <  42) 
  or 
     (ISNULL(li.PDDAYSREG,0) >= 175
  and ISNULL(ld.PDDAYSREG,0) <  175)
  or 
     (ISNULL(li.PDDAYSREG,0) >= 350
  and ISNULL(ld.PDDAYSREG,0) <  350)
  )

Буду очень признателен за любые идеи!

1 Ответ

0 голосов
/ 04 июня 2018

Почему бы вам просто не сделать что-то подобное?

where PDDAYSREG = 42 or
      (PDDAYSREG % 175 = 0 and PDDAYSREG > 0)

Большинство баз данных поддерживают mod() либо как функцию, либо с использованием оператора %.

Если значениене является целым числом, я бы предложил преобразовать его в единицу, а не использовать диапазоны:

where cast(PDDAYSREG as int) = 42 or
      (cast(PDDAYSREG as int) % 175 = 0 and PDDAYSREG > 0)
...