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

DATETIMEで指定された1週間以内に特定の平日を取得します

    日時の値では、非常に注意する必要があります。特に一日のインデックスはトリッキーです。文化固有の違いを常に考える必要があります:

    --The first of January was a Friday in 2016
    DECLARE @testDate DATE = {d'2016-01-01'};
    

    -私はこれをドイツの文化で試します。これは月曜日から始まります

    SET LANGUAGE GERMAN;
    SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in Germany the Friday was 5th day
    

    -日曜日から始まる英国の文化も同じです

    SET LANGUAGE ENGLISH;
    SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in English culture this is the 6th day
    

    --Modulo 7でこれらの値を追加することにより、この文化に依存しないようにすることができます

    SET LANGUAGE GERMAN;
    SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in Germany the Friday was 5th day
    
    SET LANGUAGE ENGLISH;
    SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in English culture this is the 6th day
    

    これで、両方のクエリが金曜日に同じ値、6を返します。 。

    あなたの例では、日曜日を週の最初の日として示しているため、特定の日の曜日は実際には7月17日である必要があります。期待される出力(7月24日)は翌週の初日ですね。

    これを試してください:

    DECLARE @DayOfWeek TINYINT = 1;
    DECLARE @Date DATETIME = '2016-07-21 23:47:11.133';
    SELECT CAST(@Date + @DayOfWeek - (@@DATEFIRST + DATEPART(WEEKDAY,@Date)) % 7 AS DATE)
    



    1. hibernate.jpa.criteria.BasicPathUsageException:基本タイプの属性に参加できません

    2. ユーザーの最後の5つの検索結果のみをテーブルに保持します

    3. SQL Server は、挿入トリガーで列の値を変更します

    4. 警告:mysqli_connect():不明なMySQLサーバーホスト