ダーク:
私はルックスがこれを気に入っていることの表があります。
table
---------------------------------------
id last_update
---------------------------------------
1 2020-02-22T00:32:04.254975Z
2 2020-02-22T02:09:27.057131Z
3 2020-02-22T01:38:48.739303Z
4 2020-02-21T06:19:17.832257Z
5 2020-02-14T03:10:02.551126Z
6 2020-02-21T23:17:01.907037Z
IDは、INTとLAST_UPDATEはVARCHAR(フォーマットはMySQLで日付時刻型としてサポートされていないため)です。
私は何をしたい今日の日付の間の日数を計算し、日付を「last_updatedです」「days_since_last_update」と呼ばれる新しい列を作成することです。
どのようにこれは、MySQLのクエリで行うことができますか?
おかげで、X
ティムBiegeleisen:
あなたは適切な日時欄に自分のタイムスタンプを格納する必要があります。ことでは言っても、我々は、使用してテキストの日付を中心に取り組んで試すことができますSTR_TO_DATE
。私は実際にあなただけの派生したデータ用で尋ねることから、新しい列を追加していないお勧めします。ときに、クエリの代わりに、この列を生成します。
SELECT
id,
last_update,
DATEDIFF(STR_TO_DATE(last_update, '%Y-%m-%dT%H:%i:%s'),
(SELECT STR_TO_DATE(t2.last_update, '%Y-%m-%dT%H:%i:%s')
FROM yourTable t2
WHERE t2.id < t1.id ORDER BY t2.id DESC)) AS days_since_last_update
FROM yourTable t1
ORDER BY t1.id;
これは、最後の更新値以来、最初の日を置くだろうNULL
テーブルのために記録されていない以前の更新があるとして、。デフォルト値をしたい場合しかし、それは簡単に含めることができます。
あなたが代わり間の日数に差たい場合はlast_update
、列と今日の日付を、その後、使用します。
SELECT
id,
last_update,
DATEDIFF(CURDATE(),
STR_TO_DATE(last_update, '%Y-%m-%dT%H:%i:%s')) AS days_since_last_update
FROM yourTable
ORDER BY id;