如何用string函数创建SQL联结

 
   | |

导读:文章主要解答了如何用string函数创建SQL联结的问题,即在列表上创建内部联结,并且该联结保存数值的方法很不同……

关键词:Oracle SQL 用string函数创建SQL联结 string函数

正在加载数据... 【TechTarget中国原创】我想在列表上创建内部联结,在该联结中的数值的保存方式很不相同,例如,在一个列中为application:username,在另一个列中为username(而不是以application开头)。你能举例说明一下怎样做吗?

【TechTarget中国原创】:我想在列表上创建内部联结,在该联结中的数值的保存方式很不相同,例如,在一个列中为application:username,在另一个列中为username(而不是以application开头)。你能举例说明一下怎样做吗?

  :这里我们是用string函数来完成从application:username值中提取username这一任务的。

  看一下下面这些示例表:


 Table1      Table2
    username    username
    Tom         asdf:Tom
    Dick        asdf:Dick
    Harry       asdf:Harry
                qwerty:Tom
                qwerty:Dick
                qwerty:Harry
                asdfTom
                Tom
                oops:

  这里我们要用到SUBSTRING函数从string值中提取子字符串(substring)。但是如果应用值的长度不一样该怎么办呢?所以我们需要在username列中的不同的地方用到子字符串,这要根据冒号所处的地方不同而不同。

  以上任务是由POSITION函数来完成的。


SELECT Table1.username
         , Table2.username
      FROM Table1
    INNER
      JOIN Table2
        ON SUBSTRING(Table2.username 
             FROM POSITION(':' IN Table2.username) + 1 
                    ) = Table1.username

  这里POSITION函数在Table2.username中找到了冒号的位置。asdf:username中位于第5位,qwerty:username中位于第7位。加上1后,我们可以在下一个字符中抽取子字符串。由于没有指定FOR长度,子字符串始终都是完全一致的。抽取出来的字字符串就好比是Table1.username相对应的行。

  如果Table2.username值不包括冒号,那么POSITION函数返回的数为0。增加1,我们就可以抽取第一个字符串的子字符串。因此,整个值都为Table1.username匹配行。这个结果可能(或可能不)在匹配中获得结果,因为也要取决于数据,但是至少会执行查询。我们要加1,仅仅是因为 SUBSTRING函数的FROM 0值通常执行不会成功。

  另外一个问题就是Table2.username值包括一个冒号。这样的话POSITION值就等于字符串的长度,FROM值也大于1。所以SUBSTRING函数同样还会执行失败。此时你只需要在 Table2.username值上加上一个空格。


 ON SUBSTRING(Table2.username || ' '
             FROM POSITION(':' IN Table2.username) + 1 
                    ) = Table1.username

  如果冒号在最后,SUBSTRING函数就会返回空格。当然,它不会与Table1.username的任何值相匹配,所以十分安全。幸好与数值匹配时尾随空格(trailing spaces)不是很重要,所以另一些行可能会继续联结。

 
查看全文
 
 
 
 
 

Oracle SQL

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

登录TechTarget中国

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