有关BETWEEN语法的问题

时间:2016-02-01 06:26:04

标签: sql oracle between

我正在编写一个脚本,该脚本检索早于或等于给定日期的帐户的最新余额。例如,如果帐户的最后一次移动是在1月5日,并且我在脚本上输入了Jan.8,则必须在1月5日检索余额。当然,如果1月8日账户中有任何变动,那么它将在1月8日收回余额。但是,每个余额对于给定的日期范围有效,具体取决于列BAL_DATEEND_BAL_DATE

这个脚本有效,但我发现它非常不寻常,因为值和表达式的位置是交换的:

SELECT
    *
FROM
    tbaadm.gstt
WHERE
    gl_sub_head_code = '12403'
    AND
    crncy_code in ('USD','HKD')
    AND
    sol_id = 5001
    AND
    last_day('29-OCT-2015') BETWEEN BAL_DATE and END_BAL_DATE 

如果我使用这个脚本可以吗?或者这是不好的做法?

2 个答案:

答案 0 :(得分:0)

要回答您的问题,请注意在SQL中,您可以使用and条件来使用多个where子句。

select ....
from ....
where <condition1> 
and <condition2>
...

因此正确使用了之间的查询。您可以在where子句中的查询之间使用,并在and中全部休息,您将获得完全相同的结果。所以你的查询类似于

SELECT
    *
FROM
    tbaadm.gstt
WHERE
    last_day('29-OCT-2015') BETWEEN BAL_DATE and END_BAL_DATE 
    and
    gl_sub_head_code = '12403'
    AND
    crncy_code in ('USD','HKD')
    AND
    sol_id = 5001

答案 1 :(得分:0)

来自 documentation

  

BETWEEN条件

     

BETWEEN条件确定一个表达式的值是否为   在由另外两个表达式定义的区间中。

基本上,您将两个表达式表达式进行比较。

last_day('29-OCT-2015') BETWEEN BAL_DATE and END_BAL_DATE 

在您的查询中,您将 expr 1 last_day('29-OCT-2015') expr 2 BAL_DATE expr 3 进行比较END_BAL_DATE

整个 BETWEEN条件 内部解释为:

last_day('29-OCT-2015') >= BAL_DATE AND last_day('29-OCT-2015') <= END_BAL_DATE