8

MySQLDBに次のテーブルがあります。

year | day_of_year
2012 | 283.813090

これらのフィールドを変換する方法はDateTime

私は試した:

tableNameからMAKEDATE(year、day_of_year)を選択します。

Date( )を返します... (hh:mm:ss)yyyy-mm-ddを取得するにはどうすればよいですか?Time

誰かが私がこの問題を解決するのを手伝ってもらえますか?

4

2 に答える 2

6

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になります。

于 2012-10-20T04:49:18.357 に答える
2

これが私が思いついたクエリです:

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

参考文献

これらは、クエリを作成するのに役立つ優れたリソースです。

12.7。日付と時刻の関数
MySQLで日付または時刻の値を追加する方法

于 2012-10-20T04:48:56.963 に答える