select * from t where ( c_beginning between p_beginning and p_ending -- rule 1 OR c_ending between p_beginning and p_ending -- rule 2 OR ( c_beginning < p_beginning and p_ending < c_ending ) ); -- rule 3