CASE w sekcji WHERE

BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
0

Witam,
Buduję zapytanie. W jaki sposób uzależnić w sekcji WHERE, które pola (kolumny) z datą mają być porównane z parametrem wejściowym? Czy tylko pozostaje mi stworzenie funkcji? Czy też da się to ogarnąć zwykłym zapytaniem? Obecnie w wyniku działania filtrów w systemie ERP ta część w sekcji WHERE wyglądałaby następująco (co uważam za nieco nielogiczne):

Kopiuj
...
AND (
CASE
  WHEN 1=1 THEN (data1 BETWEEN 'data_start' AND 'data_end')
  WHEN 0=0 THEN (data2 BETWEEN 'data_start' AND 'data_end')
END
)
...
FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 223
1

Pomijając bezsensowność przedstawionych przez Ciebie warunków:

Kopiuj
AND (CASE WHEN 1=1 THEN data1 WHEN 0=0 THEN data2 END) BETWEEN 'data_start' AND 'data_end'
PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3895
2

Ewentualnie bez case:

Kopiuj
AND (
  (1=1 and data1 BETWEEN 'data_start' AND 'data_end')
  or (0=0 and data2 BETWEEN 'data_start' AND 'data_end')
)
DR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1135
0

Ja bym się jeszcze pobawił w with i zrobił sobie pre eliminację. Ogólnie nie jestem fanem case, a już na pewno nie w where, strasznie się to potem czyta IMO

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.