MySQLDBに次のテーブルがあります。
year | day_of_year
2012 | 283.813090
これらのフィールドを変換する方法はDateTime
?
私は試した:
tableNameからMAKEDATE(year、day_of_year)を選択します。
Date
( )を返します... (hh:mm:ss)yyyy-mm-dd
を取得するにはどうすればよいですか?Time
誰かが私がこの問題を解決するのを手伝ってもらえますか?
MySQLのSEC_TO_TIME()
関数(および少しの数学)を使用することにより、タイムスタンプを取得できるようになります。
関係する計算は、day_of_year
列に1日の秒数86400を掛けてから、mod-86400での結果であり、次の式が得られます((day_of_year * 86400) % 86400)
。
SELECT SEC_TO_TIME((day_of_year * 86400) % 86400) AS time;
値を指定してこれを実行すると283.813090
、正しい時刻が表示されます*:
mysql> SELECT SEC_TO_TIME((283.813090 * 86400) % 86400) AS time;
+----------+
| time |
+----------+
| 19:30:51 |
+----------+
これを実際の日付と組み合わせるには、2つの別々の列でそれらを選択するかCONCAT()
、実際の「タイムスタンプ」を取得するために使用できます。
SELECT
CONCAT(MAKEDATE(year, day_of_year), ' ', SEC_TO_TIME((day_of_year * 86400) % 86400)) AS timestamp
FROM tableName;
*時刻計算の背後にある計算はかなり簡単です。の場合283.813090
、これは283日あることを示しています。時刻を計算するには、小数部分を使用し、24を掛けます(時間の場合)。.813090 * 24 = 19.51416
。これは19時間あることを示しています。分を計算するには、これの小数部分を取り、60を掛け.51416 * 60 = 30.8496
ます。これは30分を意味します。数秒間、もう一度、小数部分を取り、60を掛けます.8496 * 60 = 50.976
。つまり、合計で19時間、30分、50秒(.976ミリ秒、切り上げ)-19:30:51、つまり7:30pmになります。
これが私が思いついたクエリです:
SELECT TIMESTAMP(
MAKEDATE(year, day_of_year),
SEC_TO_TIME((1 - (round(day_of_year) - day_of_year)) * 24 * 60 * 60))
FROM tableName;
これは何ですか?
1 - (round(day_of_year) - day_of_year)
=>小数部分の取得(.813090)
24 * 60 * 60
=>1日の合計秒数=24時間*60分*60秒
テスト
ここでSQLフィドルを使用してクエリを試すことができます:http ://sqlfiddle.com/#!2/f62619 / 21
結果
これらは、質問で提供した2つのサンプルの結果です。
October, 10 2012 19:30:51+0000
October, 10 2012 20:15:23+0000
参考文献
これらは、クエリを作成するのに役立つ優れたリソースです。