9

1これは(別名TRUE)を返します

SELECT DATE_SUB(NOW(), INTERVAL 24*100 HOUR) = DATE_SUB(NOW(), INTERVAL 100 DAY);

100 日前、時刻は変わりません。ただし、夏時間 (米国) のため、24 時間前の 100 期間は、実際には、日で数えた場合よりも 1 時間早くなります。上記のステートメントが DST を考慮している場合、0またはが返されFALSEます。

特定のステートメントまたはセッションの DST を考慮する方法はありますか? UNIX_TIMESTAMP2038年以降はすべて遮断されるため、使用しないことをお勧めします。

4

3 に答える 3

4

このようなカスタム関数を作成する必要があります。

DELIMITER $$

CREATE FUNCTION DST(ADatetime DATETIME) RETURNS DATETIME
BEGIN
  DECLARE result DATETIME;
  SET Result = ADatetime;
  IF ADatetime >= startDST AND ADateTime <= endDST THEN 
    result = DATE_SUB(ADatetime, INTERVAL 1 HOUR);
  END IF;
  RETURN result;
END $$

DELIMITER ;
于 2011-09-07T15:17:00.997 に答える
-2

少なくともその 20 年前にはどこでも 64 ビット整数タイムスタンプが実装されると確信できる場合、2038 年以降の何かを遮断することはどのように本当の問題になるのでしょうか?

真剣に、MySQL の日時 / タイムスタンプ タイプには非常に多くの問題があるため、可能な限り回避する必要があります。

2038 を超える多くの日付を保存しますか?

そして、より高度な型サポートを備えた PostgreSQL を使用してみませんか?

于 2011-09-23T11:30:10.630 に答える