通用函数(给定一个日期范围,返回它是星期几)

给定一个开始日期、结束日期 返回是星期几
因为商超备货时,采购重复进货的情况


本人自己写函数写的并不多,应该说是很少,就算用也是参考或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;程序运行结果:

posted @ 2020-05-11 22:05  CDPJ  阅读(700)  评论(0编辑  收藏  举报