我試圖在隨機日期上進行多個編輯以在日期範圍內(3個月後,3個月前)留下完整的隨機日期時間,但將小時/分鐘/秒/毫秒爲0.多個DATEADD函數在一個查詢中 - TSQL
我這樣做,以便隨後添加隨機數量的時間來創建始終適合辦公室工作時間的活動開始和結束時間。下面的腳本爲活動的開始時間設置一個變量,然後對該變量執行5次單獨編輯,以使時間元素爲零。
是否有更簡單的方法來執行多個DATEADD編輯,它看起來笨重!
DECLARE @STARTTIME DATETIME
DECLARE @ENDTIME DATETIME
SET @STARTTIME = (SELECT DATEADD(DAY,ABS(CHECKSUM(NEWID()) % 180), (select dateadd(dd, -90, getdate()))))
SET @STARTTIME = (SELECT DATEADD(HH, - (SELECT DATEPART(HH,@STARTTIME)),@STARTTIME))
SET @STARTTIME = (SELECT DATEADD(MI, - (SELECT DATEPART(MI,@STARTTIME)),@STARTTIME))
SET @STARTTIME = (SELECT DATEADD(SS, - (SELECT DATEPART(SS,@STARTTIME)),@STARTTIME))
SET @STARTTIME = (SELECT DATEADD(MS, - (SELECT DATEPART(MS,@STARTTIME)),@STARTTIME))
SET @STARTTIME = (SELECT DATEADD(hh,(SELECT FLOOR(RAND()*(15-08)+08)), @STARTTIME))
SET @ENDTIME = (SELECT DATEADD(hh,(SELECT FLOOR(RAND()*(3-1)+1)), @STARTTIME))
SELECT
@STARTTIME AS 'STARTTIME',
@ENDTIME AS 'ENDTIME'
Results
STARTIME 2017-04-02 13:00:00.000
ENDTIME 2017-04-02 15:00:00.000
N.B.在SET語句中,在每次調用函數(例如DATEADD)之前,並不嚴格需要SELECT。將使代碼更易讀。我不知道笨重,至少你的代碼很清楚。您可以將所有的DateAdd語句鏈接在一條線上,但這隻會產生一個可怕的不可讀的混亂。 – ADyson
非常感謝,並感謝您的提示! – KEW