我在表AccountNumber
中有一个名为Accounts
的列,其值为32102
,32103
,35104
,35106
,{{ 1}},32108
,32110
,32718
所有以37651
开头的帐号为321XX
,以Liabilities
开头的帐号为351XX
。我需要选择属于这两个类别的帐户,并使用以下查询:
Assets
我的问题是关于SUBSTR功能的使用。我在使用时得到了相同的结果:
SELECT * FROM
(SELECT
ACN.ACCOUNTNUMBER,
ACN.CURRENTBALANCE,
CASE
WHEN SUBSTR(ACN.ACCOUNTNUMBER,1,3) ='321'
THEN 'LIABILITIES'
WHEN SUBSTR(ACN.ACCOUNTNUMBER,1,3)='351'
THEN 'ASSETS'
END AS ACCOUNTCATEGORY
FROM ACCOUNTS ACN
WHERE ACN.FISCALYEAR='2015')ACCOUNTS
WHERE ACCOUNTS.ACCOUNTCATEGORY IS NOT NULL
和
SUBSTR(ACN.ACCOUNTNUMBER,1,3) ='321'
有人可以告诉我为什么会这样吗?
答案 0 :(得分:6)
字符串中的第一个位置被视为具有位置1.如果您提供起始位置0,则Oracle将其视为1。
来自docs的引用: “如果start_position为0,则SUBSTR函数将start_position视为1(即:字符串中的第一个位置)”
http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_functions_2101.htm
答案 1 :(得分:3)
documentation非常明确:
- 如果position为0,则将其视为1。