USE [CRM] GO /****** Object: UserDefinedFunction [dbo].[GetDiscountByCampaignId] Script Date: 09/28/2012 15:18:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: xst -- Create date: 2012.08.30 -- Description: all 表示不打折扣,否则根据“;” 来分隔判断当前天是星期几, --然后再判断当前系统时间是在当前星期X中的那个时间段来对产品进行打相应的折扣 -- ============================================= ALTER FUNCTION [dbo].[GetDiscountByCampaignId] ( @campaign_id nvarchar(100) --计划id ) RETURNS int AS BEGIN declare @discount int, @scheduleOfWeek nvarchar(max), --一周折扣日程 @scheduleOfDay nvarchar(max), --当天折扣日程 @scheduleField nvarchar(max), --折扣日程时间段 @timePrefix nvarchar(11), --时间前缀 @timeSuffix nvarchar(7), --时间后缀 @dayOfWeekCnIndex int --系统当天的星期数 declare @tempTable TABLE ( [id] int identity(1,1), [value] nvarchar(max) ) declare @tempScheduleTable TABLE ( beginTime datetime, endTime datetime, discount int ) select @scheduleOfWeek=schedule from dbo.DC_CampaignSchedule where campaign_id=@campaign_id if(UPPER(RTRIM(LTRIM(@scheduleOfWeek)))='ALL') BEGIN set @discount=100 return @discount END set @timePrefix = convert(char(11),getdate(),120) set @timeSuffix = ':00.000' set @dayOfWeekCnIndex=( select case when datepart(dw, GETDATE())=1 then 7 when datepart(dw, GETDATE())=2 then 1 when datepart(dw, GETDATE())=3 then 2 when datepart(dw, GETDATE())=4 then 3 when datepart(dw, GETDATE())=5 then 4 when datepart(dw, GETDATE())=6 then 5 when datepart(dw, GETDATE())=7 then 6 end dayOfWeek_CN ) select @scheduleOfDay=value from dbo.GetTableBySplit(@scheduleOfWeek,';') where id = @dayOfWeekCnIndex insert into @tempTable(value) select REPLACE(value,'24:00','23:59') as value from dbo.GetTableBySplit(@scheduleOfDay,',') insert into @tempScheduleTable(beginTime,endTime,discount) select cast(@timePrefix+substring(value,0,charindex('-',value))+@timeSuffix as datetime) AS beginTime, cast(@timePrefix+substring(value,charindex('-',value)+1,5)+@timeSuffix as datetime) AS endTime, substring(value,charindex('-',value)+7,3) as discount from @tempTable select @discount=discount from @tempScheduleTable WHERE getdate()>=beginTime and getdate()<endTime -- Return the result of the function RETURN @discount END
--SET DATEFIRST 1 --设置周一为每周第一天
SELECT @@DATEFIRST
--查询每周一对应的日期(通用,不管@@DATEFIRST如何变动)
SELECT DATEADD(DAY,1-(DATEPART(WEEKDAY,GETDATE())+@@DATEFIRST-2)%7-1,GETDATE())
--查询每周一对应的日期(@@DATEFIRST为7,SQL Server默认周日为每周第一天)
SELECT DATEADD(DAY,2-DATEPART(WEEKDAY,GETDATE()),GETDATE())
相关文章: