2012-05-09 10 views
1

mysqlを使用してクエリを作成しようとしています。mysqlで2 datetimeを減算します(24時間形式で1つ、am/pm形式で1つ)

select ID,NCOde,ifnull(EndTime,now())-starttime from xxx where starttime between 
'2012-05-09 00:00:00' and '2012-05-09 23:59:59' 

問題は、ifnull(EndTime、now())はdatetimeを24時間形式で返し、starttimeはam/pm形式を使用します。

私はDATE_FORMAT(starttime, '%m-%d-%Y %T')を使用しようとしましたが、操作によってdatetime型が他の型に変更されたようです。

アドバイスはありますか?

答えて

1

使用STR_TO_DATE() MySQLのDATETIMEにごstarttime文字列に変換する:

STR_TO_DATE(starttime, '%m-%d-%Y %r') 

をしてから2回減算するTIMEDIFF()を使用して:あなたはおそらくstarttimeのデータ型を変更することを検討すべきである

select ID,NCOde, 
    TIMEDIFF(ifnull(EndTime,now()), STR_TO_DATE(starttime, '%m-%d-%Y %r')) 
from xxx 
where STR_TO_DATE(starttime,'%m-%d-%Y %r') 
     between '2012-05-09 00:00:00' and '2012-05-09 23:59:59' 

をカラムはDATETIMEまたはTIMESTAMPです。これは既にEndTimeがそのようなデータ型であることを前提としています。そうでない場合は、同様の変換も行う必要があります。

+0

+1私から、特にあなたの編集のため。 – fancyPants

+0

返事が遅れて申し訳ありませんが、別の課題が気になります。私の場合は、開始時刻と終了時刻の両方がdatetimeですが、24時間形式のものとam/pm形式のものがあります。しかし、この差し引きは間違った結果をもたらす。 1つの書式を変更するが、その書式を日時として保持するにはどうすればよいですか? –

+0

@wongchungyie: 'starttime'と' endtime'カラムがMySQL ['DATETIME'](http://dev.mysql.com/doc/ja/datetime.html)データ型である場合、それらは両方とも" 24hrフォーマットで "be" 1つが12時間形式であるためには、他のデータ型でなければなりません。おそらく 'VARCHAR'のような文字列型でしょうか?その場合、適切な[フォーマット文字列](http://dev.mysql.com/doc/en/date-and-time-functions.html#function_date-format)を '上記のように文字列を 'DATETIME'に構文解析するためには(例えば24時間、'%r'の代わりに '%T'を使用して)MySQLがSTR_TO_DATEを実行する必要があります。 – eggyal

0

DATE_SUB()機能を使用してください。

さらに、エジガールは言った。

関連する問題