回答

收藏

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

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

我需要检查数据库中是否还有两个日期和另外两个日期。
/ @' r9 H4 e. Y7 U/ E6 r1 h我的数据库看起来像这样( V9 L, U1 y8 t  d1 U  @: O
+----+--------------+------------+------------+
6 e: A9 d% a9 y| id | code         | StartDate  | EndDate    |4 N, s7 e& q) X* |
+----+--------------+------------+------------+
8 O- G- d$ S  a: y0 M! m# e. k|  1 | KUVX-21-40   | 2013-10-23 | 2013-11-22 |7 ]) k' Q" ~  U9 A
|  2 | UEXA286-1273 | 2013-10-30 | 2013-11-29 |& N  Y+ b6 P- p0 o# v$ r
|  3 | UAJFAU-2817  | 2013-10-21 | 2013-11-20 |2 z8 z/ y& T* ]6 i! v4 h7 `
|  4 | KUVX-21-40   | 2013-10-30 | 2013-11-29 |
& W( q" J! \  M* ?+ T: O2 \# }+----+--------------+------------+------------+
5 C2 D/ y3 Z5 @' X* G1 W在我的查询中,我指定范围:开始日期和结束日期让我们对其进行如下分配:8 H& f8 H  x3 \7 D+ y& v1 b: l2 A
ScopeStartDate = "2013-10-1"
; Y( C8 H% M0 Z" C: N% g1 EScopeEndDate = "2013-11-26"2 s4 d- r/ A; v- ]/ n
上面应该归还我所有的记录,因为所有的时间都超过了时间跨度。
6 o+ _% R  c) R( x. h但是我无法使查询工作:/
6 ]$ m2 T7 `/ Y& ]我已经尝试了以下查询,但是没有运气:
( U9 v1 u) ]% x% hWHERE' A0 [% f3 `! ?( T
(4 U3 Q' T+ o9 @1 c5 A& m
    (StartDate  ScopeStartDate)
( Y! x' x% e6 h! i1 d8 X    OR9 `2 |( S( |$ P5 g& T/ E4 F2 b" o3 E
    (StartDate > ScopeStartDate  AND EndDate 这将返回两个结果: 1和37 I2 G8 h9 C# s% l) Y
我究竟做错了什么?
$ N  y, u3 X. k: F               
. ~4 `4 ?) ^$ F1 {* l0 p解决方案:
/ X- Y$ L4 l3 c* w2 N# W4 [               
2 U, ~0 j" E4 }/ D9 A  n0 g3 K6 {: ?, w6 o( T

% @+ `: b: C5 y                我相信以下条件会匹配所有可能的重叠情况。. ]: }$ B* I) G7 k" x: R5 [
WHERE& l( [) t- u$ L* ], N* |, T
(! m7 _1 A4 W; Z4 o; {* ?. T/ Q
    (ScopeStartDate = StartDate)
& }# ?) c/ |( {7 b)) x; ?& \2 t4 H; A
除非您声明了非逻辑时间跨度(例如,在开始之前结束的时间跨度)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则