2017-09-22 2 views
0

Je stocke des enregistrements dans msyql où une colonne resolve_by a un horodatage unix.Récupère des enregistrements dans Mysql où l'horodatage unix est aujourd'hui

J'essaie cette requête:

SELECT id FROM tickets WHERE FROM_UNIXTIME('resolve_by','%Y-%m-%d') = CURDATE() 

La structure de la table de base est:

id|resolve_by|date_created 
4, 1506092040, 1506084841 

Mais c'est de retour 0 enregistrements. Comment puis-je obtenir des enregistrements où la valeur timestamp unix = la date d'aujourd'hui?

Merci,

+0

pouvez-vous Structure de base de données avec quelques données .. ?? – Jenish

Répondre

0

requête de Changé:

SELECT id FROM tickets WHERE FROM_UNIXTIME('resolve_by','%Y-%m-%d') = CURDATE() 

Pour:

SELECT id FROM tickets WHERE FROM_UNIXTIME(resolve_by,'%Y-%m-%d') = CURDATE() 

Il travaille maintenant.

0

En général, vous voudrez éviter d'utiliser des fonctions du côté des colonnes de conditions where, car il sera très probablement disqualifier votre requête pour bénéficier des index.

Tenir compte quelque chose comme:

create table test_table (id varchar(36) primary key, ts timestamp); 

insert into test_table (id,ts) values('yesterday',  current_timestamp - interval 1 day); 
insert into test_table (id,ts) values('midnight',  current_date); 
insert into test_table (id,ts) values('now',   current_timestamp); 
insert into test_table (id,ts) values('next midnight', current_date + interval 1 day); 
insert into test_table (id,ts) values('tomorrow',  current_timestamp + interval 1 day); 

create index test_table_i1 on test_table (ts); 

select * 
    from test_table 
where ts >= current_date 
    and ts < current_date + interval 1 day; 
; 

PS: vous pouvez également utiliser

select * 
    from test_table 
where ts between current_date and current_date + interval 1 day; 

si vous n'êtes pas pointilleux sur l'exclusion prochaine minuit (between accepte les limites)