Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

m4rkynh0z

como passr um campo varchar para date em um sql

Recommended Posts

Boa Dia a todosto tendo um problema aqui no mysql ,preciso fazer um filtro por dataData Inicio e Data Fimmas tenho um problema no banco de dados quando criaram as tabelas colocaram varchar ao inves de DateAlguem pode me ajudar como faço preciso mais ou menos dissoSELECT * FROM TABELAWHERE DATAINICIO > $XXX1AND DATAFIM < $XXX2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar do campo estar varchar, em que formato estão gravando as datas?Depedendo do formato, seria interessante fazer um cast ou algo do tipo na consulta.Mas p/ dizer a conversão ideal, posta ae o formato das datas nestes campos varchar.flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

SERIA ASSIMFILTRO IRIA PEGAR A DATA NORMAL TIPO NO INPUT TERIA 13/06/2007E NO BANCO TEM UM REGISTRO DATA TO TIPO VARCHAR COM O VALOR DE 12/07/2007COMO IREI PASSAR PRO BANCOSQL:SELECT * FROM PROJETOSWHERE DATA_INICIAL > '12/07/2007'NAO SEI SE FOI BEM CLARO, SERIA ISSO QUE EU PRECISO PODER TRATAR UM VARCHAR COMO DATE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK!Bom, como no banco as datas estão no formato dd/mm/yyyy e o padrão de datas do mysql é yyyy-mm-dd, então você pode utilizar a função STR_TO_DATE do mysql.Esta função retorna um valor no formato date do mysql, bastando você especificar o formato do conteúdo no primeiro parâmetro.Se puder, crie uma tabela de teste, como abaixo:

CREATE TABLE `datas` ( `CODIGO` int(11) NOT NULL auto_increment, `CAMPO_DATAINICIO` varchar(10) NOT NULL, `CAMPO_DATAFIM` varchar(10) NOT NULL, PRIMARY KEY (`CODIGO`) ) ENGINE=MyISAM

E inlcua alguns registros no formato dd/mm/yyyy.Depois execute esta consulta:

SELECT CODIGO,STR_TO_DATE(CAMPO_DATAINICIO,'%d/%m/%Y') AS NOVADATAINICIO,STR_TO_DATE(CAMPO_DATAFIM,'%d/%m/%Y') AS NOVADATAFIMFROM datas

ou esta (está utilizando a função no WHERE):

SELECT *FROM datasWHERESTR_TO_DATE(CAMPO_DATAINICIO,'%d/%m/%Y') >= STR_TO_DATE('01/05/2007','%d/%m/%Y') ANDSTR_TO_DATE(CAMPO_DATAFIM,'%d/%m/%Y') <= STR_TO_DATE('06/07/2007','%d/%m/%Y')

A sua consulta ficaria algo assim:

SELECT * FROM TABELAWHERE STR_TO_DATE(DATAINICIO,'%d/%m/%Y') > STR_TO_DATE($XXX1,'%d/%m/%Y')AND STR_TO_DATE(DATAFIM,'%d/%m/%Y') < STR_TO_DATE($XXX2,'%d/%m/%Y')

Desta forma não precisa alterar estrutura nem dados da tabela, nem o conteúdo das variáveis $XXX1 e $XXX2.Qquer coisa estamos ae.OBS: esta função está disponível a partir da versão 4.1.1 do mysql.flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara vlw, tava olhando manual do mysql e vi essa funcao e funcionou, mesmo assim valew pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.