Oracle SQL:如何检查一个日历周是否介于两个日历周之间
我想使用Oracle SQL:如何检查一个日历周是否介于两个日历周之间,sql,oracle,Sql,Oracle,我想使用PL/SQL检查日历周是否在两个日历周之间 假设我要检查的日历周是26。当我检查这是否在24和27之间时,它应该返回true 这部分很简单,我可以在X和Y之间使用,这就解决了问题 但是,如果我要检查的日历周是52,如果我要检查它是否在50和3之间,则应返回true。正如您所意识到的,在X和Y之间使用在这里不会给出正确的结果 好吧,我可以检查哪个日历周更大,我可以根据这个做比较,但这听起来不是一个优雅的解决方案。在这种情况下,您有什么建议?您可以使用如下逻辑: where (x <=
PL/SQL
检查日历周是否在两个日历周之间
假设我要检查的日历周是26
。当我检查这是否在24和27之间时,它应该返回true
这部分很简单,我可以在X和Y之间使用
,这就解决了问题
但是,如果我要检查的日历周是52
,如果我要检查它是否在50和3之间,则应返回true
。正如您所意识到的,在X和Y之间使用
在这里不会给出正确的结果
好吧,我可以检查哪个日历周更大,我可以根据这个做比较,但这听起来不是一个优雅的解决方案。在这种情况下,您有什么建议?您可以使用如下逻辑:
where (x <= y and v_week >= x and v_week <= y) or
(x > y and (v_week <= x or v_week >= y))
其中(x=x和v_周y和(v_周=y))
你几乎可以这样写:
where (x <= y and v_week between x and y) or
(x > y and v_week not between x and y)
其中(x y和v_周不在x和y之间)
然而,这对于第二种情况是不正确的,当(x,y)中的v_week
你不能只比较两周数,因为任何一周数总是介于两周和另一周之间
您需要精确的年份,并具有前导零的固定格式:
例如:
'2017-W52' is between '2017-W50' and '2018-W03'
'2018-W52' is not between '2017-W50' and '2018-W03'
包含date
的字符串可以使用格式进行比较我认为这是更好的答案。假设我知道日期,我如何将其转换为这种格式?to_char(columnDate,'yyyy-'W“iw')使用to_char()函数您可以使用模式“YYYY-iw”将日期格式化为适当的格式YYYY-WW您只需使用lpad将年数和周数合并为零即可:myYear | | lpad(myWeek,'0',2)