Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho que fazer uma consulta no banco mysql mas estou com um problema na minha query.
No meu banco tenho 3 campos string, sendo um day, month e year. Estes não são datas, e sim varchar. Ok. Não poderei mudar isso pois peguei este banco assim mesmo. Quero pegar as datas iguais ou maiores do que hoje. Ele me retorna até virar maio, mas dai pega acima do dia 26-05 e não antes. Existe alguma forma ou função de melhorar isso? Qualquer ajuda será bem-vinda. Atenciosamente
SELECT *,(str_to_date(CONCAT(agenda.year,'-',agenda.month,'-',agenda.day), '%Y-%m-%d')) as dta
FROM agenda
WHERE agenda.day >= 26
AND agenda.month >= 04
AND agenda.year >= 2016
ORDER BY (str_to_date(CONCAT(agenda.year,'-',agenda.month,'-',agenda.day), '%Y-%m-%d'))
LIMIT 6
Você diz deixar este coluna real_date como date no mysql? Tranquilo, o lance que há inserções até 2018. E como peguei agora, terei que atualizar tudo.
De qualquer forma, valeu a dica
**Update Adicionei tmb uma função de validação haha não sabia q era 'easy'
A conversão seria de forma automática.
Ex:
CREATE DATABASE conversao
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE conversao;
CREATE TABLE pedidos(
id int(8) primary key auto_increment
,dia CHAR(2)
,mes CHAR(2)
,ano CHAR(4)
)Engine=InnoDb;
INSERT INTO pedidos (dia, mes, ano) VALUES ('06', '10', '1992');
INSERT INTO pedidos (dia, mes, ano) VALUES ('22', '04', '2016');
INSERT INTO pedidos (dia, mes, ano) VALUES ('22', '12', '2018');
INSERT INTO pedidos (dia, mes, ano) VALUES ('30', '30', '2018'); /*Data Invalida de proposito*/
Este seria o seu 'cenário' ...
Ai só adicionar a coluna.
ALTER TABLE pedidos add dt_real DATE;
E agora Fazer um Select.
SELECT CONCAT("UPDATE pedidos SET dt_real = '", ano,'-',mes,'-',dia, "' where id = ", id, ';') as INSERT_SQL FROM pedidos WHERE day(CONCAT(ano,'-',mes,'-',dia)) IS NOT NULL;
Saida:
UPDATE pedidos SET dt_real = '1992-10-06' where id = 1;
UPDATE pedidos SET dt_real = '2016-04-22' where id = 2;
UPDATE pedidos SET dt_real = '2018-12-22' where id = 3;
--o 4 Registro não é exibido pelo fato da função day() retornar NULL
Abraços.
Nossa, me ajudo muito. Gratidão
Parabéns, me ajudou Muito. Ele já me retorunou todas as queries de update. Agoa fazer a query na frente é mais facil.
Gratidão amigo
Criar uma coluna date_real e inserir tudo como data não rola?
Acredito que ficar concatenado a cada consulta impacta em Performasse de maneira absurda.