2016-11-12 25 views
0

where句の場合、%h:%i文字列がある場合、now()の前に最後のdatetimeをどのように取得できますか?ここでMySQLは時:分形式から日付を取得します

mysql> select now(), comb('20:20'); 
+---------------------+---------------------+ 
| now()    | comb('20:20')  | 
+---------------------+---------------------+ 
| 2016-11-12 20:43:39 | 2016-11-12 20:20:00 | 
+---------------------+---------------------+ 

mysql> select now(), comb('20:20'); 
+---------------------+---------------------+ 
| now()    | comb('20:20')  | 
+---------------------+---------------------+ 
| 2016-11-11 01:43:39 | 2016-11-10 20:20:00 | 
+---------------------+---------------------+ 

mysql> select now(), comb('20:20'); 
+---------------------+---------------------+ 
| now()    | comb('20:20')  | 
+---------------------+---------------------+ 
| 2016-01-01 01:43:39 | 2015-12-31 20:20:00 | 
+---------------------+---------------------+ 
+0

あなたは「現実の生活」に最後に存在することを意味しますか、またはどこの場所で他の条件が存在することを意味しますか? – maraca

+0

"実際の生活"で。その時間:秒の組み合わせと一致する最後のフィジカル日時モーメント。 –

+0

@maracaこれは、他の条件とのselect文のためのものですが、私の 'comb 'は' between'文で使用されます: 'combとtime_min_strとnow()'の間のevent_time。 –

答えて

2
select concat(date(if(time(now()) > '20:20', now(), date_sub(now(), INTERVAL 1 day))), ' 20:20'); 
+0

右...私はあなたがmysqlのconcatを使用する必要が忘れて+1 – maraca

1

がそこに(作品を得るための一つの方法です:

いくつかの架空のselect

は( combが明示的に now()に依存したりすることはできません、私が必要とする魔法の機能/コンビネータ、である)意図した動作を表示します機能が対応するものに置き換えている場合は、任意の言語):あなたが引く場合、それは...よくそれが動作するべきではありませんが、私は、MySQLのバグを発見したように見える

SELECT 
    CASE WHEN DATE_FORMAT(NOW(), '%H:%i') >= '20:20' THEN 
    STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(), '%Y %d %e'), ' ', '20:20'), '%Y %d %e %H:%i') 
    ELSE 
    DATE_SUB(
     STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(), '%Y %d %e'), ' ', '20:20'), '%Y %d %e %H:%i'), 
     INTERVAL 1 DAY 
    ) 
    END latest_valid_date 

...他にはnullを返します1日目...でもこれはうまくいくはずです。

関連する問題