如何使用含有子链的SQL POSITION函数

 
   | |

导读:作者在本文中介绍了使用含有子链的SQL POSITION函数的一些窍门。

关键词:Oracle Oracle SQL SQL POSITION SQL POSITION函数

正在加载数据... 【TechTarget中国原创】我表中的一个列包含以下数据……,我想提取"-"字符之前的所有东西。我已经尝试过(SUBSTR(p1.location,1, INSTR(p1.location,'-')-1)),但问题是如果找不到"-",INSTR就会返回"0",SUBSTR也是空的。还有没有其他可能的情况?

【TechTarget中国原创】问:我表中的一个列包含以下数据:


SE.108.000.034MFJ
    SE.108.000.034MFJ-0LNC
    SE.108.001.023LIN-1PBA.NNA
    SE.108.050.043ERTO-0FTA
    SE.045.000.011EMFJ

  我想提取"-"字符之前的所有东西。我已经尝试过(SUBSTR(p1.location,1, INSTR(p1.location,'-')-1)),但问题是如果找不到"-",INSTR就会返回"0",SUBSTR也是空的。还有没有其他可能的情况?
 
  答:你的确可以使用一些“窍门”:只需要在你查找第一个"-"时这个列的末尾加上一个"-"。
   


 SELECT SUBSTRING(
              p1.location 
              FROM 1
              FOR POSITION('-' IN p1.location||'-') - 1
                    )
      FROM daTable AS p1

  在该查询中,SUBSTRING和POSITION函数为这些函数的标准SQL版本。这些函数也会按照你预期目标进行运行。你的专门的数据库系统可能包括着些函数的不同名称和句法,但是他们的运行方式却是相同的。

  当列值包括"-"时,你就会获得你所需的结果。考虑以下值:

  SE.108.050.043ERTO-0FTA

  该值有23个字符,在第19位上包含了一个"-"。当我们在该值末尾加上另一个"-"时,它就变成了:

  SE.108.050.043ERTO-0FTA-

  但是POSITION函数会在第19位上找到第一个"-"。从这个位置数字上减去1,就得到18。将18作为这个子链的长度进行提取,得到:

  SE.108.050.043ERTO

  现在我们考虑一下不包含"-"的列值,如:

  SE.045.000.011EMFJ

  该值的有18个字符串,当我们在它末尾加上一个"-"时,它就变成了:

  SE.108.050.043EMFJ-

  POSITION函数将会找到我们在它的末尾链接的"-",在第19位上。减去1得到18,这正好就是原来的列值长度。所以在这种情况下,SUBSTRING函数返回的就是整个值。

  很清楚了吧?

 
查看全文
 
 
 
 
 

Oracle SQL

 
Oracle Application Express(Oracle APEX)设计的一个主要目标是:快速构建基于Oracle数据库的Web应用程序。
 
SELECT子句通常是一个SELECT语句的第一个子句。它标识出你所想要包含到结果集中的列。这些列是从在FROM子句中指定的基表中返回的。
 
没有ORDER BY子句,Oracle不会保证行显示的顺序。它们可能是按照你想要的顺序排列,但也可能不是。
 
Toad For Oracle的产品策略就是为Oracle开发一款工具,它可以满足不同人的不同需求,比如DBA、开发人员、分析师以及管理者等等。
 
据Toad For Oracle产品经理John Pocknell所说,这次发布的Toad 10致力于生产力的概念,其中包括了:灵活性、易用性、自动化和协作等内容。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录