sql >> Database teknologi >  >> RDS >> Mysql

SQL For at kontrollere om lokalet er ledigt mellem datoerne

Dette vil besvare dit specifikke spørgsmål med ja eller nej. Jeg er ikke sikker på, at det er nyttigt, da datosøgningsværdierne alle er specifikke i en hårdkodet liste.

select coalesce(max('no'), 'yes') as available
from tbl t           
where room_type_id = 23 and
    dt in ("2018-03-06 00:00:00", "2018-03-07 00:00:00", 
           "2018-03-08 00:00:00", "2018-03-09 00:00:00");

Hvis det er meningen med din logik at finde mindst én åben dato, så kan du prøve noget som dette:

select case when count(*) = 4 then 1 else 0 end as whatever_this_means
from tbl t
where room_type_id = 23 and
    dt in ("2018-03-06 00:00:00", "2018-03-07 00:00:00", 
           "2018-03-08 00:00:00", "2018-03-09 00:00:00");

Problemet vil være, at du har hårdkodet værdien 4 nu, som er bundet til antallet af datoer på listen senere i forespørgslen. Der er måder at håndtere dette mere dynamisk på, men det er ikke helt klart ud fra dit spørgsmål, den bedste måde at gøre det på.



  1. ingen sætning parsed og forkert antal eller typer af argumenter - cfstoredproc

  2. Sådan samler du forskellige værdier fra flere lister ved hjælp af Oracle JSON_OBJECT &JSON_ARRAYAGG

  3. PHP viser billeder fra databasen

  4. Sådan returneres elementer fra et JSON-array i MariaDB