| Author |
Topic |
|
harlingtonthewizard
Constraint Violating Yak Guru
352 Posts |
Posted - 2008-11-30 : 22:20:15
|
| I would like a function that accepts nvarchar as @DateRange and returns StartDateRange DateTime, EndDateRange DateTime, DateRangeSelection nvarchar as one row in three columns. I would then like to know how to use. Here are my two pieces of code so far.set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[fn_DateSel](@DateRange nvarchar(30))RETURNS @VALUES TABLE (StartDateRange DateTime, EndDateRange DateTime, DateRangeSelection nvarchar (30))ASBEGININSERT @VALUES(StartDateRange, EndDateRange, DateRangeSelection)SELECT StartDateRange, EndDateRange, DateRangeSelectionFROM (SELECT CAST(@DateRange AS nvarchar(30)) AS DateRangeSelection,CASEWHEN @DateRange = 'Current Hour' THEN DATEADD(HOUR, 0, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Last Hour' THEN DATEADD(HOUR, - 1, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))END AS StartDateRange,CASEWHEN @DateRange = 'Current Hour' THEN GETDATE()WHEN @DateRange = 'Last Hour' THEN DATEADD(HOUR, 0, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))END AS EndDateRange) AS DateRangeSelRETURNENDset ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER Procedure [dbo].[Test_Function_DateSel]@DateRange nvarchar(30)ASSELECT StartDateRange, EndDateRange, DateRangeSelectionFROM (Select dbo.fn_DateSel (@DateRange) As DateSel) As TBeginSelect EventTypeFrom EventDetailsWhere EventStartTime BETWEEN StartDateRange AND EndDateRangeEndReturn |
|
|
harlingtonthewizard
Constraint Violating Yak Guru
352 Posts |
Posted - 2008-11-30 : 23:20:26
|
| And the answer seems to be:set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[fn_DateSel](@DateRange nvarchar(30))RETURNS @VALUES TABLE (StartDateRange DateTime, EndDateRange DateTime)ASBEGININSERT @VALUES(StartDateRange, EndDateRange)SELECT StartDateRange =CASEWHEN @DateRange = 'Current Hour' THEN DATEADD(HOUR, 0, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Last Hour' THEN DATEADD(HOUR, - 1, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Last 12 Hours' THEN DATEADD(HOUR, - 12, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Last 24 Hours' THEN DATEADD(HOUR, - 24, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Today' THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)WHEN @DateRange = 'Yesterday' THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), - 1)WHEN @DateRange = 'Last Weekend' THEN DATEADD(WEEK, - 1, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 5))WHEN @DateRange = 'Current Week' THEN DATEADD(WEEK, 0, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))WHEN @DateRange = 'Last 7 days' THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), - 7)WHEN @DateRange = 'Last 5 Week Days' THEN DATEADD(WEEK, - 1, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))WHEN @DateRange = 'Last Week' THEN DATEADD(WEEK, - 1, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))WHEN @DateRange = 'Last 2 Weeks' THEN DATEADD(WEEK, - 2, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))WHEN @DateRange = 'Current Month' THEN DATEADD(MONTH, 0, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))WHEN @DateRange = 'Last 30 days' THEN DATEADD(DAY, - 30, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0))WHEN @DateRange = 'Last 90 days' THEN DATEADD(DAY, - 90, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0))WHEN @DateRange = 'Last Month' THEN DATEADD(MONTH, - 1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))WHEN @DateRange = 'Last 3 Months' THEN DATEADD(MONTH, - 3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))WHEN @DateRange = 'First Quarter' THEN DATEADD(QUARTER, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Second Quarter' THEN DATEADD(QUARTER, 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Third Quarter' THEN DATEADD(QUARTER, 2, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Fourth Quarter' THEN DATEADD(QUARTER, 3, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Current Quarter' THEN DATEADD(QUARTER, 0, DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0))WHEN @DateRange = 'Last Quarter' THEN DATEADD(QUARTER, - 1, DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0))WHEN @DateRange = 'Current Year' THEN DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Current Financial Year' THEN DATEADD(QUARTER, 2, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Last Financial Year' THEN DATEADD(QUARTER, 2, DATEADD(YEAR, -1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)))WHEN @DateRange = 'Last Year' THEN DATEADD(YEAR, - 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))END,EndDateRange =CASEWHEN @DateRange = 'Current Hour' THEN GETDATE()WHEN @DateRange = 'Last Hour' THEN DATEADD(HOUR, 0, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Last 12 Hours' THEN DATEADD(HOUR, 0, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Last 24 Hours' THEN DATEADD(HOUR, 0, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0))WHEN @DateRange = 'Today' THEN GETDATE()WHEN @DateRange = 'Yesterday' THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)WHEN @DateRange = 'Last Weekend' THEN DATEADD(WEEK, - 1, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 7))WHEN @DateRange = 'Current Week' THEN GETDATE()WHEN @DateRange = 'Last 7 days' THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)WHEN @DateRange = 'Last 5 Week Days' THEN DATEADD(WEEK, - 1, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 5))WHEN @DateRange = 'Last Week' THEN DATEADD(WEEK, 0, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))WHEN @DateRange = 'Last 2 Weeks' THEN DATEADD(WEEK, 0, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))WHEN @DateRange = 'Current Month' THEN GETDATE()WHEN @DateRange = 'Last 30 days' THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)WHEN @DateRange = 'Last 90 days' THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)WHEN @DateRange = 'Last Month' THEN DATEADD(MONTH, 0, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))WHEN @DateRange = 'Last 3 Months' THEN DATEADD(MONTH, 0, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))WHEN @DateRange = 'First Quarter' THEN DATEADD(QUARTER, 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Second Quarter' THEN DATEADD(QUARTER, 2, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Third Quarter' THEN DATEADD(QUARTER, 3, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Fourth Quarter' THEN DATEADD(QUARTER, 4, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Current Quarter' THEN GETDATE()WHEN @DateRange = 'Last Quarter' THEN DATEADD(QUARTER, 0, DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0))WHEN @DateRange = 'Current Year' THEN GETDATE()WHEN @DateRange = 'Current Financial Year' THEN DATEADD(QUARTER, 2, DATEADD(YEAR, DATEDIFF(YEAR, -1, GETDATE()), 0))WHEN @DateRange = 'Last Financial Year' THEN DATEADD(QUARTER, 2, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))WHEN @DateRange = 'Last Year' THEN DATEADD(YEAR, 0, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))ENDRETURNENDset ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER Procedure [dbo].[Test_Functions_DateTime]@DateRange nvarchar(30)ASDeclare @StartDateRange AS DateTimeDeclare @EndDateRange AS DateTimeSET @StartDateRange = (Select StartDateRange From fn_DateSel (@DateRange))SET @EndDateRange = (Select EndDateRange From fn_DateSel (@DateRange))BeginSelect dbo.EventTypeConv (EventType) As EventTypeFrom EventDetails Where EventStartTime BETWEEN @StartDateRange AND @EndDateRangeEndReturn |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-11-30 : 23:33:54
|
yup. that depends on what type of UDF you create. For table valued UDFs you can do like whats shown above. for scalar udfs you can use it like a field in select and where likeSELECT dbo.functionname(@parameter) |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-11-30 : 23:35:05
|
| also see this to get idea of various types of UDFshttp://www.sqlteam.com/article/user-defined-functions |
 |
|
|
harlingtonthewizard
Constraint Violating Yak Guru
352 Posts |
Posted - 2008-12-01 : 00:04:50
|
| Thanks once again visakh16, book marked that one :) |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-12-01 : 00:10:22
|
You're welcome |
 |
|
|
|
|
|