Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL:如何检查一个日历周是否介于两个日历周之间_Sql_Oracle - Fatal编程技术网

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)