关于 BETWEEN 语法的问题

Questions on BETWEEN syntax

我正在编写一个脚本,用于检索早于或等于给定日期的帐户的最新余额。例如,如果账户的最后一次移动是在 Jan.5,而我在脚本中输入 Jan.8,则它必须取回 Jan.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 

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

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

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

所以正确使用了 between 查询。您可以在 where 子句中使用 between query 并在 and 中使用 rest all ,您将获得完全相同的结果。所以你的查询类似于

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

来自documentation,

BETWEEN Conditions

A BETWEEN condition determines whether the value of one expression is in an interval defined by two other expressions.

基本上,您是在比较两个表达式一个表达式

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

在您的查询中,您正在比较 expr 1last_day('29-OCT-2015')expr 2 BAL_DATE表达式 3 END_BAL_DATE.

整个 BETWEEN 条件 内部解释 为:

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