人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

教你輕松學(xué)會SQL Server記錄輪班的技巧

發(fā)布日期:2021-12-30 12:25 | 文章來源:gibhub

例:公司員工采取三個輪班制度:凌晨0:00到早上8:00為第一班,早上8:00到下午4:00為第二班,下午4:00到晚上12:00為第三班。

員工使用電子時鐘進行簽名,這種電子簽名可以自動將記錄添加到SQL Server數(shù)據(jù)庫中。但是,有時候,需要增加一個夜班;即使這個輪班發(fā)生在第二天,它仍然會被認為是第三班。

你也許希望根據(jù)輪班對記錄進行分組,但是在你的計劃中會有兩個非常令人頭痛的問題:
(1)不是所有的雇員都是按時到達的;
(2)有時候員工工作的時間會比他們的一個輪班的時間長一些。

為了能在你的列表中得到正確的分組,你必須假設(shè)所有的員工能在一個輪班的開始和結(jié)束時間之間的任意時間開始工作。

使用CASE語句是一種解決辦法。Listing A中的SQL語句告訴我們,在創(chuàng)建測試表沒有錯誤的情況下,它是如何工作的。

為了使程序代碼完全準(zhǔn)確的運行,你需要在時間的小窗口中得到每一個輪班的開始時間和下一個輪班的結(jié)束時間。在剛才的例子中,你可以用"15:59:59.123"這個值代替@StartTime,然后再重新運行代碼。這時候,你必須在每一個輪班結(jié)束的分界點上增加999毫秒。 解決方案

這個例子假設(shè)輪班時間從來沒有改變過,但是如果改變了輪班時間該怎么辦呢?你必須仿照這個例子并根據(jù)改變了的時間寫出所有的代碼。

一個更好一點的主意就是,針對我們的輪班創(chuàng)建一個表來調(diào)用Shifts的開始時間和結(jié)束時間。在這個表中,你可以修改Case語句來查找StopTime列。

Listing B中包含了創(chuàng)建Shifts表并向該表中增加記錄的代碼。代碼在一個輪班中設(shè)置了時間后,這樣使代碼看上去既簡單又靈活:

復(fù)制代碼 代碼如下:

DECLARE @StartTime VARCHAR(20)
SET @StartTime ="22:59:59"
SELECTTOP 1 ShiftName FROM ShiftWork.Shifts
WHERE Shifts.StartTime <= @StartTime
ORDERBY StartTime DESC
我之所以要將輪班記錄進行降序排列,是為了避免第三個輪班的邊界問題。我將用一些測試案例來論證我的結(jié)論,這些內(nèi)容你可以在Listing C中看到。

實際上,你可以將這個邏輯應(yīng)用到TemeCards表的記錄中去,而不需要創(chuàng)建另外的表,也就不需要在表中增加數(shù)據(jù)了。我同樣使用一個簡單的變量來論證我的邏輯。

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部