通用函数(给定一个日期范围,返回它是星期几)
给定一个开始日期、结束日期 返回是星期几
因为商超备货时,采购重复进货的情况
本人自己写函数写的并不多,应该说是很少,就算用也是参考或Copy别人的,近10几年工作性质不玩也不用这个,最近新冠期间才用一会。
以前看过一点日期、时间函数,但都早抛弃到九霄云外了,好在单个的实现还是可行的,其实这些东西不难,熟能生巧呗,三天不捞也手生呢,
组合起来摸索下,摸出了下面这样:
--上次丰老板让写成Delphi函数,本来是想写成SQL函数
function MyWeekfuncA(d1,d2: TDateTime): string; const str: array[1..7] of string =('日,', '1,', '2,', '3,', '4,', '5,', '6,'); var i: integer; begin Result := ''; if Trunc(d1)-Trunc(d2)<=7 then //还需要加个条件,开始日期不能大于结束日期 begin for i := trunc(d1) to trunc(d2) do Result := Result + str[DayOfWeek(i)]; end else begin ShowMessage('日期选择超过了7天日期'); end; end; {下面调用} procedure TForm1.btnMoreClick(Sender: TObject); begin edtWKMore.text := MyWeekfuncA(dtpStart.Date, dtpEnd.Date); end;
-------------------------------------------------------------------------------------
--循环一个开始、结束日期,动态返回这个范围内的日期是星期几 SET DATEFIRST 1 --切换成我们正常的星期几 SELECT DATEPART(weekday,getdate()) ----------------- DECLARE @StartDate DATETIME,@EndDate DATETIME SET @StartDate = '2020-06-05' SET @EndDate = '2020-06-10' DECLARE @ReceiveStr NVARCHAR(100) WHILE @StartDate<=@EndDate BEGIN PRINT DatePart(weekday,@StartDate) --print @StartDate SET @StartDate = DateAdd(day,1, @StartDate) END
运行结果:
--返回表值函数,是6条记录,还要继续修改到返回的星期几都放在一个字段的一条记录中 --DROP FUNCTION fn_GetWK_1 GO CREATE FUNCTION dbo.fn_GetWK_1 ( @StartDate DATETIME, @EndDate DATETIME ) RETURNS @tmp TABLE ( --[t] [NVARCHAR](2) NULL [tb_GetWeekDay] [NVARCHAR](50) NULL ) BEGIN DECLARE @tmpStr CHAR(100) DECLARE @ReceiveStr NVARCHAR(100) WHILE @StartDate<=@EndDate BEGIN --@ReceiveStr = CAST(DatePart(weekday,@StartDate) AS VARCHAR(100)) --print @StartDate CAST(DatePart(weekday,@StartDate) AS VARCHAR(100)) --@tmpStr = DatePart(weekday,@StartDate) SET @tmpStr = CAST(datepart(weekday,@StartDate) as CHAR(100)) INSERT INTO @tmp VALUES(@tmpStr) SET @StartDate = DateAdd(day,1, @StartDate) END RETURN END SELECT * FROM fn_GetWK_1('2020-06-05','2020-06-10')
运行结果:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{下面看似类似一些杂乱,是么,瞧瞧体会一些似乎也不错啊,网上查到过瞟了一眼没细看,后来用到类似的东西回过头来发现浏览器还没关闭,这个用的感觉很好}
https://zhidao.baidu.com/question/497205270.html
描述:DayOfTheWeek函数返回日期在一个星期e69da5e887aae79fa5e9819331333330363139中的索引值。
1 = Monday2 = Tuesday
3 = Wednesday
4 = Thursday5 = Friday6 = Saturday7 = Sunday备注:DayOfTheWeek是服从ISO8601标准的,因为它用Monday 作为星期的开始。
DayOfWeek是不服从ISO8601的,它把Sunday作为星期的开始。
varmyDate : TDateTime;
day : array[1..7] of string;
begin// 不能使用LongDayNames -因为它开始于Sunday
day[1] := 'Monday';
day[2] := 'Tuesday';
day[3] := 'Wednesday';
day[4] := 'Thursday';
day[5] := 'Friday';
day[6] := 'Saturday';
day[7] := 'Sunday';
myDate := EncodeDate(2002, 12, 25);
ShowMessage('Christmas day 2002 is on a '+day[DayOfTheWeek(myDate)]);
end;程序运行结果: