0

start_time: TIMESTAMPテーブルには、、 の 3 つのフィールドがdays_prior: INTありtime_open: TIMEます。これから start_time - days の値を取得し、結果の時間部分を設定してから00:00:00、それに時間を追加します。

つまり、元のタイムスタンプは '2013-05-02 14:57:00' のようなもので、日は 1、時間は '09:30:00' で、'2013-05-01 09:30 を返したい:00'.

これは、タイムスタンプの日付部分を分割し、それを時刻と連結することで実行できることを認識しています。ただし、WHERE ステートメントの一部として同じクエリで結果を使用したい場合は、連結の結果もタイムスタンプにする必要があります。

私のクエリは、理想的には次のようになります。

SELECT
    t1.id, 
    t1.start_time,
    CONCAT(DATE_SUB(DATE(t1.start_time), INTERVAL t2.days_prior DAY), ' ', t2.time_open) 
FROM
    t1, t2
WHERE
    t1.t2_id = t2.id

ただし、これは次のような結果を生成しています。

1, 2012-10-30 18:00:00, 323031322d31302d33302030393a30303a3030
4

1 に答える 1

1

日付と時刻を扱うときは、文字列操作 CONCAT を避けようとします。代わりに、これを処理するための適切な日付と時刻の機能があります。

これがうまくいくかどうか試してください。実際の日時を提供するため、プレゼンテーション用にフォーマットする必要がある場合は、それを追加する必要があります。

SELECT
    t1.id, 
    t1.start_time,
    MAKEDATE(YEAR(t1.start_time), DAYOFYEAR(t1.start_time)) - INTERVAL t2.days_prior DAY + INTERVAL t.2time_open HOUR_SECOND
FROM
    t1, t2
WHERE
    t1.t2_id = t2.id

SQLフィドル

于 2013-05-02T20:23:33.787 に答える