0

varchar として列に一種の奇妙な日付形式のテーブルがあります-これは会社が私に提供した形式です-真ん中の T は物事を台無しにしているようです.

EVENTID   | EVENT_DATE      | EVENT_DURATION

1       | 2012-10-14T06:00  | 15
2       | 2012-10-14T06:15  | 11
3       | 2012-10-14T06:26  | 14    
4       | 2012-10-14T06:40  | 10

など...など

現在の時刻をまったく同じ形式で返すPHPコードがあります(途中に奇妙な「T」があります)

$thisin = DateTime::createFromFormat('Y-m-d\TH:i', date('Y-m-d\TH:i')); 
$thisin->setTimeZone(new DateTimeZone('UTC'));
$thisout= $thisin->format('Y-m-d\TH:i'); 

今日が 14 日で、現在の時刻が 06:21 であると仮定すると、"$thisout from php" と次の 5 行 (将来) に一致する期間に基づいて、現在の行をクエリするにはどうすればよいですか。

現在の日時はphpから「2012-10-14T06:21」として返されるため、クエリは出力する必要があります

2   | 2012-10-14T06:15  | 11        (Now SHowing)
3   | 2012-10-14T06:26  | 14    
4   | 2012-10-14T06:40  | 10

ect ect

私は何時間も頭を悩ませてきましたが、DATE_FORMAT() が機能していないようで、真ん中に T があるのではないかと思います。現在の時間が特定の行に適用されるかどうかを判断するために期間を使用する方法を理解する必要もあります。

これは動作しません

SELECT DISTINCT EVENTID, EVENT DATE, EVENT_DURATION 
FROM epg_event
WHERE DATE_FORMAT(EVENT_DATE, '%Y-%m-%dT%H:%i') >= DATE_FORMAT(NOW(), '%Y-%m-%dT%H:%i') 
ORDER BY EVENT_DATE ASC LIMIT 5

何か案は?

4

3 に答える 3

0

間隔を追加する必要があります。

where event_date + INTERVAL duration MINUTE >= NOW()
于 2012-10-23T09:08:48.467 に答える
0

日付情報は、データベースの varchar 列ではなく Date 列にロードする必要があります。前述のとおり、これは日付の ISO 形式です。

于 2012-10-23T08:57:30.520 に答える
0

私は現在それをテストすることはできませんが、次のようなものがうまくいくかもしれません:

SELECT DISTINCT EVENTID, EVENT_DATE, EVENT_DURATION 
FROM epg_event
WHERE (event_date <= NOW()) AND (ADDTIME(event_date, INTERVAL event_duration MINUTE) >= NOW()) 
ORDER BY event_date ASC LIMIT 5

DATE_FORMAT()フィールドをフォーマットするためのものDATETIMEであり、その逆ではありません。また、前述のように、event_date は DATETIME フィールドである必要があり、データをデータベースにインポートするときに時刻を変換する必要があります。

于 2012-10-23T09:06:35.997 に答える