Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
Sql Between子句-是否必须对参数重新排序?_Sql_Oracle_Between - Fatal编程技术网

Sql Between子句-是否必须对参数重新排序?

Sql Between子句-是否必须对参数重新排序?,sql,oracle,between,Sql,Oracle,Between,我有一个很愚蠢的问题。我有一个类似以下内容的查询: SELECT id FROM myTable WHERE valueCol BETWEEN :x and :y; 当:x:y它不返回我想要的行时,这非常有效!对于这种情况,我必须手动反转变量以使其正常工作 有没有一种方法可以在变量顺序无关紧要的情况下编写一个between子句 PS>我加入了SQL,因为我很确定这只是一个一般的SQL问题。是的,这很简单: SELECT id FROM myTable WHERE valueCol BETW

我有一个很愚蠢的问题。我有一个类似以下内容的查询:

SELECT id FROM myTable WHERE valueCol BETWEEN :x and :y;
:x:y
它不返回我想要的行时,这非常有效!对于这种情况,我必须手动反转变量以使其正常工作

有没有一种方法可以在变量顺序无关紧要的情况下编写一个between子句

PS>我加入了SQL,因为我很确定这只是一个一般的SQL问题。

是的,这很简单:

SELECT id 
FROM myTable 
WHERE valueCol BETWEEN LEAST(:x,:y) and GREATEST(:x,:y);
您可以使用一个案例:

between case when :x <= :y then :x else :y end 
and case when :x <= :y then :y else :x end 

在两种情况之间当:x您可以自己检查并交换值,或者,您也可以这样做,让Oracle解决:

BETWEEN LEAST(:x,:y) AND GREATEST(:x,:y)

很抱歉进行后续操作-我想知道:让Oracle做这项工作是否会对性能产生影响?简单的答案是-是和否。是的,执行最少和最大的任务无疑会消耗一些CPU周期,但不,您不会注意到这一点。分享和享受。@drew_w:还有一点额外的工作要做实际的比较。更大的问题是,这是否会影响优化器选择不使用索引范围扫描操作来满足
valueCol
上的谓词。(我知道Oracle在开发执行计划时可以进行一些“绑定变量窥视”来获得基数估计值。(理想情况下,Oracle会评估最小和最大的表达式,并将结果用于开发执行计划,因此不会有任何区别。但我不知道是否这样做。)这表明x实际上必须根据您的PS:您最好将其标记为“sql”-无论这是否是一般sql问题。您的问题与Oracle sql有关(而不是Oracle中的分区策略、最佳服务器设置或其他内容),因此将此标记为“Oracle”加上“sql”是完美的。