回答

收藏

MySQL检查两个日期范围是否与输入重叠

技术问答 技术问答 261 人阅读 | 0 人回复 | 2023-09-14

我需要检查数据库中是否还有两个日期和另外两个日期。; N- Q2 m* v1 e& @2 D* V
我的数据库看起来像这样
! A/ L2 L/ p# Y/ q+----+--------------+------------+------------+
9 k( }! e4 R& L: I8 t| id | code         | StartDate  | EndDate    |" w. b6 K8 L  y' `5 f& m. w
+----+--------------+------------+------------+
" L( M) l  x) E6 r|  1 | KUVX-21-40   | 2013-10-23 | 2013-11-22 |
9 }& v8 y: d9 K; X6 u|  2 | UEXA286-1273 | 2013-10-30 | 2013-11-29 |! v# ~2 b) B: V/ X9 \
|  3 | UAJFAU-2817  | 2013-10-21 | 2013-11-20 |  J/ q& B* W9 a4 `
|  4 | KUVX-21-40   | 2013-10-30 | 2013-11-29 |2 P- Y, }. `4 {4 M+ \# o5 U  D
+----+--------------+------------+------------+
3 m0 S1 o! M' r8 n; t0 `在我的查询中,我指定范围:开始日期和结束日期让我们对其进行如下分配:
, Z3 t- M% ?( W% K. a# t9 B& [ScopeStartDate = "2013-10-1"' o! K( H0 L" A4 v$ r
ScopeEndDate = "2013-11-26"; G, S; y" A2 l- ~( b" C
上面应该归还我所有的记录,因为所有的时间都超过了时间跨度。
9 s' p  N3 i: G9 z, L3 [但是我无法使查询工作:/
2 p  g! b4 h5 Q) b! L我已经尝试了以下查询,但是没有运气:7 V. D8 M5 O" h5 N
WHERE  j) u4 _4 ^% f7 H
(1 [9 F# {; l* K  X, C; d6 V( W4 |
    (StartDate  ScopeStartDate)
: P8 v9 n+ [! |    OR
9 c* f; O* n2 F' Z0 o    (StartDate > ScopeStartDate  AND EndDate 这将返回两个结果: 1和3
/ Q( k: W7 o; f8 U( i我究竟做错了什么?& f( i; Q2 n. Q- ]
               
9 {  ^6 c$ W% A' g& P( |5 _解决方案:& \+ S$ T$ J- }7 S
                / [2 z4 S: X( f# O" [7 n* A
, t* o  D5 e9 l& @5 ^* W0 {- Z

* ?) ?2 v, N8 M                我相信以下条件会匹配所有可能的重叠情况。9 J! H* W5 S1 d0 z9 b
WHERE$ R1 H6 W/ g+ h4 [0 k# e# S
(+ q6 K2 C. i1 G; E. M
    (ScopeStartDate = StartDate)$ i* F  L2 D% R+ M% v$ x
)% w0 C' {7 H2 X6 ?
除非您声明了非逻辑时间跨度(例如,在开始之前结束的时间跨度)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则