2016-03-25 4 views
0

私は旅行の時間を得るために到着時間から出発時間を差し引いています。期間を得るために2回引く

到着/出発はHH:MMの形式です。

私はpostgresqlを使用しています。時刻の列は、定義方法については単に「文字列」と表示されます。友人は私が整数としてそれらを投げ助けたが、私はまだこの時点では固執しています:

SELECT x, cast (table1.arrival as integer) - cast (table.1departure as integer), sum(y), count(*) 
FROM table1 INNER JOIN table2 
ON ..... 
GROUP BY ..... 
ORDER BY.... 

友人がこの私に言ったが、私は彼が何を意味するのか全くわからない:「いいえ、あなたが作成する必要があります1分30分= 90分新しい変数が整数としてキャストされ、計算されます。どうすればいいですか?あなたのRDBMSは、MySQLの場合

+0

あなたの質問に適用されるように、[この回答はこちら](http://stackoverflow.com/a/1800378/1678362)を少し変更することができます。 – Aaron

+0

これらの列はどのように定義されていますか? 'varchar'sとして? – Mureinik

+0

RDBMS Mysqlはありますか? –

答えて

0

実際に列がvarchar(またはtext)の場合は、最初に適切な時間に列をキャストする必要があります。

SELECT x, table1.arrival::time - table.1departure::time, sum(y), count(*) 
FROM table1 INNER JOIN table2 
ON ..... 
GROUP BY ..... 
ORDER BY. 

列に格納された時間は24時間形式で適切にフォーマットされた時刻ではない場合、上記time - timeの結果はinterval(例えば22時40分)

を失敗します。

extract(epoch from table1.arrival::time - table.1departure::time)/60 

あなたは分を取得するために60でそれを分割する必要がある理由だ間隔で秒を返しextract(epoch ..):あなたは数分で結果を取得したい場合は、間隔からそれらを抽出する必要があります。到着と出発時刻が同じ日にない場合、これはしかし、正しく動作しません

(例えば出発は23時25分にあり、到着が午前7時23分で、次の日である)


無関係が、 :決して日付、時刻またはタイムスタンプをvarcharまたはtext列に格納する必要があります。 常にが適切なデータ型を使用します。

+0

おや....ありがとうございます。完璧に働いた。そうですね、これらのテーブルは私によって作成されたものではありません。なぜ、それらが正しく保存されなかったのか説明できません。 – am340

0

あなたが例えばMySQLのDATEDIFF()関数

を使用することができます。

SELECT DATEDIFF(arrivale,departure) AS DiffDate 

私はarrivaleと出発が同じ日にあることを、ここで想定しています。 その到着と出発は、HH:MMのような形式のTimeDateです。

関連する問題