我正在编写一个脚本,该脚本检索早于或等于给定日期的帐户的最新余额。例如,如果帐户的最后一次移动是在1月5日,并且我在脚本上输入了Jan.8,则必须在1月5日检索余额。当然,如果1月8日账户中有任何变动,那么它将在1月8日收回余额。但是,每个余额对于给定的日期范围有效,具体取决于列BAL_DATE
和END_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
如果我使用这个脚本可以吗?或者这是不好的做法?
答案 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