如何在Oracle中获取字符串的前三个字符

时间:2015-07-28 13:26:48

标签: sql oracle

我在表AccountNumber中有一个名为Accounts的列,其值为32102321033510435106,{{ 1}},321083211032718所有以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'

有人可以告诉我为什么会这样吗?

2 个答案:

答案 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。
  •