0

mysql を使用してハッカー ニュース アルゴリズムを実装しようとしたところ、次のエラーが発生しました。

    Double value is out of range in 
    pow(((unix_timestamp() - unix_timestamp(postDateTime))/3600 + 1),1.5)

Where the value of postDateTime is 2012-12-15 10:41:31

上記を次のように実装すると

pow(((unix_timestamp() - unix_timestamp(cast(postDateTime as signed)))/3600 + 1),1.5)

完全に機能していますが、その背後にある理由を理解していません

4

1 に答える 1

1

どのバージョンの mysql を実行していますか? このリンクをチェックしてください。

ドキュメントを確認して、負の値が得られる理由を理解してください。

引数なしで呼び出された場合、Unix タイムスタンプ ('1970-01-01 00:00:00' UTC からの秒数) を符号なし整数として返します。UNIX_TIMESTAMP() が日付引数で呼び出された場合、引数の値を '1970-01-01 00:00:00' UTC からの秒数として返します。date は、DATE 文字列、DATETIME 文字列、TIMESTAMP、または YYMMDD または YYYYMMDD 形式の数値です。サーバーは、日付を現在のタイム ゾーンの値として解釈し、UTC の内部値に変換します。

...

UNIX_TIMESTAMP() 列を減算する場合は、結果を符号付き整数にキャストすることができます。セクション12.10「キャスト関数と演算子」を参照してください。

于 2012-12-15T11:56:49.247 に答える