當前位置:首頁 » 編程語言 » sql工作日

sql工作日

發布時間: 2022-09-08 02:33:18

A. sql語句計算兩個日期之間有多少個工作日

/*
因為工作中一個奇怪的需求,要用sql語言計算兩個日期間有多少個工作日。
設定是一個星期有5個工作日,從星期一到星期五
說明:
第一個星期的工作日數:datepart(dw,
@begdt)-datepart(dw,
@begdt),最少0天
末一個星期的工作日數:datepart(dw,
@enddt),最多5天
計算方法:
如果兩個日期處在同一個星期內,直接計算「第一個星期的工作日數」
否則按下面的公式計算
(兩個日期間的總天數
-
第一個星期的天數
-
末一個星期的天數)
/
7
*
5
+
第一個星期的工作日數
+
末一個星期的工作日數
*/
--計算並返回兩個日期間的工作小時數(工作日*8)按周一到周五計算
--必須先set
datefirst
1
create
function
dbo.calcworkhours(@bdate
datetime,
@edate
datetime)
returns
integer
as
begin
declare
@hours
integer
if
@@datefirst
<>
1
or
@bdate
>
@edate
return
-1
select
@hours
=
--如果終止日期與起始日期在同一個星期內,只需要計算有幾天即可
case
when
datepart(wk,
@edate-1)-datepart(wk,@bdate)
=
0
then
case
when
datepart(dw,
@bdate)
>
5
then
0
when
datepart(dw,
@edate-1)
>
5
then
6
-
datepart(dw,
@bdate)
else
datepart(dw,
@edate-1)
-
datepart(dw,
@bdate)
+
1
end
--如果終止日期與起始日期在不同的星期內
--首先計算出除前後兩個星期外完整的星期數
*
5
else
(datediff(dd,@bdate,@edate)
-
(8-datepart(dw,
@bdate))
-
datepart(dw,
@edate-1))
/
7
*
5
--再加上第一個星期里的工作日數
+
case
when
datepart(dw,
@bdate)
<
6
then
6
-
datepart(dw,
@bdate)
else
0
end
--加上末一個星期里的工作日數
+
case
when
datepart(dw,
@edate-1)>5
then
5
else
datepart(dw,
@edate-1)
end
end
*
8
return
@hours
end

B. sql 查詢幾個工作日之後的日期

select datediff('2009-1-1', '2008-1-1');

用datediff函數,第一個參數是截止時間,第二個參數是起始時間

不好意思,剛才的是mysql,剛看了下sql的文檔發現有點區別- -,sql的話,用下面的形式:
DATEDIFF ( datepart , startdate , enddate )

所以你要求2個日期之間間隔的天數,這樣寫:

datediff( dd, '2008/1/1', '2009/1/2' )

這里的dd表示計算天數差

C. 每個月的工作日有多少天,每個月剩餘多少天(去除工作日,法定節假日)的sql語句。

select year(日期),month(日期),is_working_day,count(*) from table group by is_working_day order by year(日期),month(日期);

mysql的寫法,如果sqlserver,
year(日期),month(日期) 換成
DateName(year,日期),DateName(month,日期)

D. weekday(date) 後 怎麼求 工作日的總天數和休息日的總天數(sql)

DECLARE @date DATE='' DECLARE @date_month_end_day DATE =''SET @date='2016-09-04'SET @date_month_end_day=DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DAY(@date),@date)))--指定日期所在月份剩餘天數和剩餘周末天數DECLARE @i INT = DAY(DATEADD(DAY,1,DAY(@date)))DECLARE @j INT =0WHILE @i <= DAY(@date_month_end_day)BEGIN IF DATEPART(WEEKDAY,CAST(CAST(YEAR(@date) AS VARCHAR(4))+'-'+CAST(MONTH(@date) AS VARCHAR(2))+'-'+CAST(@i AS VARCHAR(2)) AS DATE)) NOT BETWEEN 2 AND 6 SET @j=@j+1 SET @i=@i+1ENDSELECT @date AS 輸入的日期,DATEDIFF(DAY,@date,@date_month_end_day) AS 剩餘天數,@j AS 剩餘周末天數

E. db2sql判斷日期是否為工作日

db2sql判斷日期是否為工作日:
如果格式固定的話,可以嘗試TO_DATE再捕獲異常的方式進行處理。

CREATEFUNCTIONISDATE(p_datevarchar(10))
RETURNSINT
LANGUAGESQL
BEGIN
--錯誤標志
DECLAREv_resultINT;
DECLAREv_dateDATE;
--定義錯誤處理
--如果發生錯誤,繼續處理
--但是把標志位設置為0
DECLARECONTINUEHANDLER
FOR
SQLEXCEPTIONSETv_result=0;
--錯誤標志,首先設置為正常.
SETv_result=1;
SETv_date=TO_DATE(p_date,'YYYY-MM-DD');
returnv_result;
END
db2=>select
db2(cont.)=>isdate(񟭌-10-10')A,
db2(cont.)=>isdate(񟭌-13-13')B
db2(cont.)=>FROM
db2(cont.)=>SYSIBM.SYSDUMMY1@
AB

F. sql里我有一張全年工作日表,如9-1,9-2,9-4....,我建立了一個視圖輸入日期就可以查詢當天排班

用代理作業,就是計劃任務,sqlserver自帶的,寫好更新插入語句就會定時自動執行的。數據得進行判斷,沒有在新表的數據才進行插入,已經在的數據可以做更新處理,或者不處理。

G. SQL怎麼實現所有日期對應的上一工作日和下一工作日

select dateadd( day, -1, getdate() ) 上一工作日,
getdate() 當前工作日,
dateadd(day,1,getdate() ) 下一工作日

H. 如何使用sql語句計算工作日(除去周六周日以及法定節假日)

最多隻能除去周六周日,法定假日是自己國家規定的,需要單獨處理的親。

I. 判斷是工作日還是周末的SQL語句

方法一:
 SELECT d.theDate,
        DATEDIFF(DAY, '17530101', d.theDate) % 7 / 5 AS IsWeekend,
        1 - DATEDIFF(DAY, '17530101', d.theDate) % 7 / 5 AS IsWeekday
FROM    (
                SELECT CAST('20081124' AS SMALLDATETIME) AS theDate UNION ALL
                SELECT '20081125' UNION ALL
                SELECT '20081126' UNION ALL
                SELECT '20081127' UNION ALL
                SELECT '20081128' UNION ALL
                SELECT '20081129' UNION ALL
                SELECT '20081130'
        ) AS d
方法二:
SELECT d.theDate,
CASE WHEN DATEPART(weekday,thedate+@@DATEFIRST -1)<6 THEN 1 ELSE 0 END,
CASE WHEN DATEPART(weekday,thedate+@@DATEFIRST -1)>=6 THEN 1 ELSE 0 END

FROM (
SELECT CAST('20081124' AS SMALLDATETIME) AS theDate UNION ALL
SELECT '20081125' UNION ALL
SELECT '20081126' UNION ALL
SELECT '20081127' UNION ALL
SELECT '20081128' UNION ALL
SELECT '20081129' UNION ALL
SELECT '20081130'
) AS d

J. sql怎樣獲取工作日

SELECT datename(weekday, getdate())
返回結果是 星期三

熱點內容
好車看哪些配置 發布:2025-01-13 10:53:44 瀏覽:655
android點擊圖片事件 發布:2025-01-13 10:53:43 瀏覽:976
c語言拷貝函數 發布:2025-01-13 10:52:23 瀏覽:781
php判斷手機訪問 發布:2025-01-13 10:46:06 瀏覽:762
資料庫十張表 發布:2025-01-13 10:41:50 瀏覽:395
仿php 發布:2025-01-13 10:41:40 瀏覽:811
後綴解壓什麼意思 發布:2025-01-13 10:35:17 瀏覽:185
索尼安卓11如何退回安卓10 發布:2025-01-13 10:24:09 瀏覽:127
程序編譯結構 發布:2025-01-13 10:24:08 瀏覽:90
創建郵箱地址伺服器連接錯誤 發布:2025-01-13 09:49:24 瀏覽:723