回答

收藏

从日期范围内的表中选择所有日期,每个空日期包括1行

技术问答 技术问答 247 人阅读 | 0 人回复 | 2023-09-12

我正在尝试重构ASP.Net网站中的某些代码,并且正在编写的存储过程有问题。
: n  |) v& d8 f4 A% T7 s0 `5 i我想做的是获取一个日期范围,然后从表格中选择该范围内的所有数据,但如果不存在日期,我仍然需要选择一行。
2 r" _- _& K% }4 ^5 e( r正如您在下面的代码中看到的那样,我的想法是创建一个临时表,并用日期范围内的所有日期填充该表,然后将其加入到我要选择的表中,但这是行不通的。我在这里做错什么了吗?tempDate列在此联接中始终为null,但是我已经检查了表,并且表中确实有数据。; T2 e3 I1 H3 d/ g* P9 C% P8 E) {
-- Parameters& ]6 T0 X9 G5 W3 B+ M" o$ J' J
DECLARE @DutyDate datetime='2012-01-01 00:00:00'
8 [/ ^. \! _; l2 n. VDECLARE @InstructorID nvarchar(2) = N'29'; ?0 D' \% d+ N% |- V
DECLARE @datesTBL TABLE (tempDate DATETIME)# |, H6 [1 u9 Z
-- Variables
$ c' U5 x* r, l3 gDECLARE @StartDate DATETIME * E8 Y+ u) B7 G
DECLARE @EndDate DATETIME
7 {' p4 x4 K2 b6 w7 Y* X$ l0 Y" OSELECT
- t: T9 Y5 s2 g: Y: I* z$ g! W    @StartDate =StartDate,
" L7 K4 @) _' V    @EndDate = EndDate
# j3 L3 d/ J$ A0 a* y9 oFROM
6 ^# D; j% M$ }, P    DutyPeriodTbl 4 T9 L- j! C5 B2 _! E$ r
WHERE 1 p; p& k! _' ]5 t( u; ^
(StartDate = @DutyDate)
8 M! b: E; \5 y8 W
8 Q  q% S) W$ X. _* [DECLARE @d DATETIME = @StartDate
+ p7 Z9 W0 z- ~WHILE @d<=@EndDate1 d" t; y" ]* G- y0 r3 t
BEGIN
( t% E6 o" K0 k    INSERT INTO @datesTBL VALUES (CONVERT(DATETIME, @d, 102))0 [' J* }4 J$ d% T. g9 s7 J1 K
    SET @d=DATEADD(day,1,@d)
; r' k; ^$ A& n' m6 {# GEND: b  M2 q2 r# t' F9 H' O, M) g7 [6 j1 w* P
SELECT ! u1 y4 B7 u! C- L$ g0 f5 `' R- }
    dt.tempDate ,% G3 g+ }+ r8 ~2 q6 }0 n
    InstructorID,           EventStart, : ?9 U7 g6 L, Q
    EventEnd,               cancelled,
7 T8 w4 V8 m2 k8 h$ M4 s1 d( l    cancelledInstructor,
- j% b+ a) A- g; A    EventType,              DevName,
( \# }& l) `6 u; F+ a& V7 N; G; Y    Room,                   SimLocation,
5 P$ R$ n  @( L; E4 U    ClassLocation,          Event,
0 L* P, R* @0 |. E    Duration,               TrainingDesc,
) y* g0 I1 w) o' W8 r  T8 v' O9 U0 o1 u    Crew,                   Notes, + t% w1 n' v9 M6 d% ~0 M- \. T& P
    LastAmended,            InstLastAmended, 6 H  U1 S2 c: O8 p6 y- Q# B/ [
    ChangeAcknowledged,     Type,
5 Q' n! ?, t* }3 n    OtherType,              OtherTypeDesc,
- y/ @- E# A! G! o- v    CourseType
( {4 f; Y, |  J/ g( ~+ }FROM 5 M5 S3 Z$ h1 W1 n( S% Y
    OpsInstructorEventsView iv
5 R& {* {! Y& h9 gLEFT OUTER JOIN
9 e  W  u# \2 ^% k: r    @datesTBL dt
2 Y' ]# {$ g: m" A( A7 B3 pON
/ i1 o( T& A" i( r    CONVERT(DATETIME, iv.EventStart, 102) = CONVERT(DATETIME, dt.tempDate, 102)
5 N+ g3 W- q0 Y7 W5 OWHERE
' `& z6 B3 Q* n6 ]6 M, j    InstructorID = @InstructorID
" n4 e6 j, w! l1 f( s( h/ w7 \- iAND 9 c9 v" `& j: F1 F# G: S+ k( Z
    EventStart BETWEEN CONVERT(DATETIME, @StartDate, 102) AND CONVERT(DATETIME, @EndDate, 102)9 f2 X( u# p" i( M
ORDER BY : u' J6 f2 A" d  ]" T' ?) v
    EventStart0 J" P) e; r/ D+ u( c% P
               
" J0 k5 F- b% U& ~8 _- W0 S解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则