sql >> データベース >  >> RDS >> Mysql

MySQLのtimestampdiff()はSQL Serverのdatediff()と同等ですか?

    これは、次の2つのいずれかが原因である可能性があると思います。

    • SQLServerインスタンスとMySQLインスタンスの間で週の最初の曜日として分類されるもの。
    • SQLServerとMySQLの間の週のカウント方法

    指定された日付2012-09-01 土曜日に該当します。これは、通常は日曜日または月曜日である週の開始日を除外しているようです。

    MySQLのデフォルトの開始日は0 (Sunday)です。

    SQL Serverの週の始まりを確認するには、 @を使用できます。 @DATEFIRST これを実行することによって:

    select @@DATEFIRST -- default US English = 7 (Sunday)
    

    計算を変更して、週ではなく日数で機能し、7で割ってより正確な値を取得することができます。この値は、好きなように丸めることができます。

    MySQL:SQLFiddleデモ

    SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
    
    
    | NOOFWEEKENDS1 |
    |---------------|
    |      108.5714 |
    

    SQL Server:SQLFiddleデモ

    SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
    
    | NOOFWEEKENDS1 |
    |---------------|
    |    108.571428 |
    

    以前の結果と一致させるか、追加の週末としてカウントするかに応じて、切り上げまたは切り下げを行うことができます。

    SQL Serverは、 このフィドルの例 日付範囲を土曜日と日曜日の2日間に変更しました:

    SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
    
    | NOOFWEEKENDS1 |
    |---------------|
    |             1 |
    

    一方、MySQLの同じ値は、に示すように、1週間として完全な7日しかカウントしないようです。このデモフィドル

    SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
    
    | NOOFWEEKENDS1 |
    |---------------|
    |             0 |
    

    このデモでわかるように、7日が経過したときにのみ1の結果が得られます。フィドル

    SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
    
    | NOOFWEEKENDS1 |
    |---------------|
    |             1 |
    



    1. Yii CActiveDataProviderオブジェクトを反復処理する方法は?

    2. SQL Server T-SQL関数の使用方法SUM:5つのユースケース

    3. SQLServerで特定の文字のASCIIコード値を返す方法

    4. 列名がさまざまなデータベースで予約されているキーワードであるかどうかを確認する方法