情報: MS SQL Server 2008 R2
こんにちは。2 つのパラメーター入力と 1 つの出力を持つ関数を作成しようとしています。2 つの入力は、月曜日を 1 として開始する INT としての曜日 (@dowin) と、DATETIME (@datein) です。この関数の目的は、(@datein) から作成された週の範囲を調べ、曜日 INT (@dowin) を使用してその範囲から新しい DATETIME を選択することにより、新しい DATETIME 出力 (@newdate) を決定することです。
理由: アポイント スケジューラは開始日を使用しており、アポイントが再発生する場合は、開始日から再発生する曜日を作成します。各予定のインスタンスが必要なテーブル ビューから SSRS レポートを作成しています。
これが私がこれまでに持っている関数スクリプトです:
CREATE FUNCTION UFsurgopsched(@datein DATETIME,@dowin int)
RETURNS datetime
AS
BEGIN
DECLARE @newdate datetime
DECLARE @startOfWeek date
DECLARE @endOfWeek date
SELECT @newdate = datepart(dw,@dowin) as date in
(
SELECT
convert(date, dateadd(dd, -1*(datepart(dw, @datein)-2), @datein)) AS @startOfWeek,
convert(date, dateadd(dd, 7-(datepart(dw, @datein)-1), @datein)) AS @endOfWeek
)
RETURN @newdate
END
私が取得しようとしているもの: - @dowin = 3 - @datein = 2014-02-11 07:30:00.000 - @datein は次の範囲を見つける必要があります: 2014-02-10 から 2014-02-16 その範囲内で@dowin によると、@newdate は 2014-02-12 07:30:00.000 になります。
**編集* ** みんなの助けを借りて、よりシンプルな機能で解決できました。
CREATE FUNCTION [dbo].[UFsurgopsched](@datein DATETIME,@dowin int)
RETURNS DATETIME
AS
BEGIN
DECLARE @newdate DATETIME
DECLARE @dateweek DATETIME
SET
@dateweek =
convert(datetime, dateadd(dd, -1*(datepart(dw, @datein)-2), @datein))
SELECT
@newdate =
dateadd(DD ,@dowin - 1, @dateweek)
RETURN
@newdate
END