regina 0 Denunciar post Postado Julho 18, 2012 Bom dia, qual é a melhor forma de armazenar as datas comemorativas no mysql sendo que elas deverão ser exibidas todo ano em sua proximidade. A tabela está assim: CREATE TABLE IF NOT EXISTS `datas_comemorativas` ( `id` int(3) NOT NULL AUTO_INCREMENT, `data` date NOT NULL, `ocasiao` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM 2011-07-20 Dia do Amigo Este não não está exibindo. Minha select SELECT data,ocasiao FROM datas_comemorativas WHERE data BETWEEN DATE_SUB( DATE_FORMAT(CURDATE(),'%m-%d') , INTERVAL 1 DAY ) AND DATE_ADD( DATE_FORMAT(CURDATE(),'%m-%d') , INTERVAL 15 DAY) ORDER BY data ASC agradeço Compartilhar este post Link para o post Compartilhar em outros sites
Danilo Soncini 15 Denunciar post Postado Julho 18, 2012 1 - No teste que eu fiz tive que deixar o DATE_FORMAT para fora do SUBDATE pois estava retornando NULL outra coisa foi aplicar o DATE_FORMAT a data para que funcionasse o BETWEEN. Da seguinte forma funcionou: SELECT data,ocasiao FROM datas_comemorativas WHERE DATE_FORMAT(data,'%m-%d') BETWEEN DATE_FORMAT(SUBDATE( NOW() , INTERVAL 1 DAY ),'%m-%d') AND DATE_FORMAT(ADDDATE( NOW() , INTERVAL 15 DAY),'%m-%d') ORDER BY data ASC Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Julho 19, 2012 esse tipo de consulta nao ira dar certo pois no momento em que o ano virar você tera um problema 1230 (30 de dezembro) é maior que 115 (15 de janeiro) logo deveria vir invertido no between (no between o menor vem sempre antes do maior, senao nao funciona direito), mas se for invertido os valores no between você vai pegar o ano todo, de janeiro até dezembro... sendo assim, você precisa sempre cadastrar todas as datas para todos os anos , o que é o correto ,pois tem uma penca de feriado móvel. Compartilhar este post Link para o post Compartilhar em outros sites