現在のクエリの前に日付を生成するのか、関数内に日付を生成するのかを判断するのは困難です。
関数を呼び出す前に実行したい場合。あなたは簡単に使うことができます:
DECLARE @startdate AS DATETIME;
DECLARE @endDate AS DATETIME;
--- code that will work on any version of SQL Server
SET @startdate = DateAdd(day, DateDiff(day, 0, getdate()), 0)
SET @enddate = DateAdd(day, DateDiff(day, 0, getdate()), 0)
+ CAST('23:59:59' as datetime)
-- SQL Server 2008+ code with DATE datatype
SET @startdate = CAST(CAST(GETDATE() AS DATE) as datetime);
SET @enddate = CAST(GETDATE() AS DATE) + CAST('23:59:59' as datetime);
SELECT SUM(QTY) AS Discounts
FROM dbo.fFinancialDataFull('Date Range Report', @startdate , @enddate, '1', '1',
'ALL', 'ALL', 'ALL', 'ALL', '1', '1',
'1', '1', '1') AS fFinancialDataFull_1
WHERE ReportCategoryID = 62
開始日は深夜になり、終了日は現在の日付から1秒を引いたものになります。(デモ付きのSQLフィドルを参照)
今日の日付を深夜に簡単に生成し、今日の日付の終了日を時刻で簡単に生成する方法を探している場合は、を23:59:59
作成できますTable-Valued Function
。
このタイプの関数は、渡した値に基づいてstartdate
との両方を返すことができます。enddate
可能であれば、現在の関数を変更して1つの日付パラメーターを受け入れるようにします。次に、その関数内で、日付を返す新しい関数を呼び出すことができます。
新しい関数は次のようになります。
create function dbo.GetStartEndDates
(
-- pass in the date
@dt datetime
)
RETURNS @dates table
(
StartDate datetime,
EndDate datetime
)
AS
BEGIN
insert into @dates
select CAST(CAST(@dt AS DATE) as datetime) startdate, -- returns yyyy-mm-dd 00:00:00.000
CAST(@dt AS DATE) + CAST('23:59:59' as datetime) enddate -- returns yyyy-mm-dd 23:59:59.000
return
END
次に、現在の関数には次のものが含まれます。
alter function dbo.fFinancialDataFull
(
--your list of parameters
--replace the start/end date with
@dateValue datetime
)
returns table...
as
begin
select *
from yourtable
cross apply dbo.GetStartEndDates(@dateValue) d -- this will return both start/end date
end
その後、クエリの残りの部分で開始日/終了日を使用できます。
現在の関数を呼び出すときは、次のようにgetdate()
任意の日時を渡します。
select *
from dbo.fFinancialDataFull(param1, param2, getdate(), etc, etc).