2017-09-22 13 views
0

私は、resolve_byカラムにunixタイムスタンプがあるレコードをmsyqlに保存しています。Unixのタイムスタンプが今日のMysqlのレコードを取得

私はこのクエリをしようとしている:

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

基本的なテーブル構造は次のとおりです。

id|resolve_by|date_created 
4, 1506092040, 1506084841 

しかし、これは0レコードを返しています。 UNIXのタイムスタンプ値=今日の日付のレコードを取得するにはどうすればよいですか?

おかげで、から

+0

あなたが共有することができますいくつかのデータを持つデータベースの基本構造.. ?? – Jenish

答えて

0

変更したクエリー:

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

へ:

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

今は働いています。

0

一般に、where条件の列側で関数を使用することは避けたいと考えています。これは、おそらくインデックスから利益を得るためにクエリが不適格となるためです。

が何かのように考えてみましょう:

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:あなたは次の深夜を除くうるさいいないのであれば、あなたも

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

を使用することができます(betweenは、両方の境界を受け入れる)

関連する問題