Oracle中substr() 函数和左右链接

本文详细介绍了 substr() 函数的使用方法及其语法,包括正数、负数和 0 的应用示例。同时,文章深入探讨了 Oracle PL-SQL 中左连接和右连接的概念,通过 SQL 查询语句展示了如何实现这两种连接类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

substr() 函数:  返回字符串的一部分。 
  语法:substr(string,start,length) 
  必需 - 规定在字符串的何处开始。 
  正数 - 在字符串的指定位置开始 
  负数 - 在从字符串结尾的指定位置开始 
    0  - 在字符串中的第一个字符处开始 

例子: 
substr("http://www.hualai.net.cn", 0); //返回:http://www.hualai.net.cn,截取所有字符 
substr("http://www.hualai.net.cn", 2); //返回:tp://www.hualai.net.cn,截取从t开始之后所有字符 
substr("http://www.hualai.net.cn", 0, 3); //返回:htt,截取从A开始3个字符 
substr("http://www.hualai.net.cn", 0, 100); //返回:http://www.hualai.net.cn,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。 
substr("http://www.hualai.net.cn", 0, -3); //返回:.cn,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。 

左连接和右连接: 
在Oracle PL-SQL中,左连接和右连接以如下方式来实现 
SELECT emp_name, dept_name 
FORM Employee, Department 
WHERE Employee.emp_deptid(+) = Department.deptid 

   此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。 

反之: 
SELECT emp_name, dept_name 
FORM Employee, Department 
WHERE Employee.emp_deptid = Department.deptid(+)则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示。

### Oracle 中 `SUBSTR` 函数详解 #### 功能描述 在 Oracle 数据库中,`SUBSTR()` 函数用于从字符串中提取子字符串。此函数非常灵活,能够根据不同需求提取字符串的不同部分[^2]。 #### 语法结构 `SUBSTR` 函数的通用语法如下: ```sql SUBSTR(string, start_position [, substring_length]) ``` - `string`: 需要处理的目标字符串。 - `start_position`: 子串开始的位置。正数值表示从向右计数;负数值则意味着从右边往边计算。 - `substring_length`(可选): 要获取的字符数量。如果不提供该参数,则默认返回从起始位置直到原字符串结尾的所有字符[^4]。 #### 特殊情况处理 当未指定 `substring_length` 参数时,Oracle 将自动把剩余所有字符为结果返回给用户。而一旦设定的 `substring_length` 值小于1,那么最终得到的结果将是 NULL[^1]。 #### 实际应用案例 下面是一些具体的例子来展示如何运用 `SUBSTR` 函数: ##### 示例 1: 提取固定长度的子串 假设有一个名为 `example_text` 的字段存储着 "HelloWorld!" 这样的数据,现在想要取出其中间五个字母组成的单词 “oWor”。 ```sql SELECT SUBSTR(example_text, 6, 5) FROM dual; -- 结果:"oWorl" ``` 请注意,在这里因为是从第六位开始选取连续五位所以实际上获得的是 "oWorl" 而不是预期中的 "oWor". 如果希望正好取得四个字符可以调整第二个参数为7. ##### 示例 2: 不限制结束位置的情况 继续沿用上面的例子,如果我们只关心从某个特定索引处开始的内容而不介意其后的具体数目,就可以省略第三个参数。 ```sql SELECT SUBSTR('HelloWorld!', 8) AS result_string FROM DUAL; -- 结果:"rld!" ``` 在这个查询里,由于没有给出截断宽度,因此整个表达式的输出就是原始字符串自第八个字符之后的部分。 ##### 示例 3: 处理负数起点的情形 有时候可能需要逆序访问字符串内的成分,这时便可以通过传递一个小于零整数的方式实现这一点。 ```sql SELECT SUBSTR('abcdefg', -3, 2) as reversed_substring FROM DUAL; -- 结果:"ef" ``` 上述命令会先定位到最后三个元素所在之处再向前移动两位从而选出所需的片段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值