Bueno ... yo guardaría en ese campo "fecha" que sólo ha de guardar un "mes" (no fecha completa) el nº de mes 1->Enero, 2->febrero y .. (no me gusta la idea .. pero bueno) el "MENSUAL" .. aunque si entiendo bien "MENSUAL" equivaldría a que ese registro tendría que contener 1,2,....12 por qué está en todos esos meses (¿es así?) ..
Lo que pretendo llegar es a "normalizar" esa base de datos para poder hacer consultas exclusivamente por ese rango que necesites de fechas (nº de mes) .. Por ejemplo:
CURDATE() obtiene la fecha actual y MONTH() el mes de una fecha dada (en nº) .. así que si lo aplicas a CURDATE() obtendrás el nº de mes actual para hacer tu cóndicional en tu sentencia SQL:
SELECT * FROM tabla WHERE fecha=MONTH(CURDATE())
(siempre y cuando fecha guarde tu "mes" como numero ..)
Si luego necesitas obtener esa fecha como "nombre legible" 1 -> Enero . .2 -> Febrero ." puedes usar un simple array en tu lenguaje de programación para usar el indice del dato obtenido de tu consulta a tu campo "fecha" en dicho array:
(ejemplo en php)
Código PHP:
$array_meses=array(1=>"Enero","Febrero",....);
echo $array_meses[$fecha];
Si entendí bien la consulta SQL que comentabas en tu mensaje inicial .. atendiendo a que las fechas las guardariamos (esos meses) como nº y el caso especial "MENSUAL" (en un campo VARCHAR (7) o similar .. no uno numérico por qué guardamos también ese string "mensual"):
SELECT * FROM tabla WHERE (fecha=MONTH(CURDATE()) OR fecha='MENSUAL') AND GERENCIA=1
Un saludo,