返回首页

gbase数据、南大通用产品文档:GBase8aINSTR()

更新日期:2024年09月11日

语法格式
INSTR(str,substr)
INSTR(str,substr,start_position,N)
表5- 10 参数说明
参数
说明
str
字符串母串。
substr
字符串子串。
start_position
表示从字符串(左端)第几个字符开始匹配, 如是负数,则
从右端往前反向查找子串。可选参数,默认为1。
nth_appearance
从start_position 开始向字符串尾方向查找第几个匹配字符
串。可选参数,默认为1。
函数说明

第一种语法功能:
返回子串substr 在字符串str(左端开始)第一次出现的位置。如果没有,返
回0。如果有一个参数为NULL,则返回NULL。

第二种语法功能:
1. 查找第nth_appearance 个匹配字符串的功能;
2. 从母串的第start_position 个字符开始查找匹配字符串的功能;
3. 支持第三个参数start_position 为负数的情况,即从母串右侧第
|start_position|个位置反向查找子串的功能。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
694
说明
substr 在str 中的位置,以1 开始计数。
返回的位置是按全字符串正向位置计数的,与从哪个位置开始无关
示例
示例1:返回“bar”在“foobarbar”中第一次出现的位置。
gbase> SELECT INSTR('foobarbar', 'bar') FROM dual;
+---------------------------+
| INSTR('foobarbar', 'bar') |
+---------------------------+
|
4 |
+---------------------------+
1 row in set
示例2:“foobar”不在“xbar”中。
gbase> SELECT INSTR('xbar', 'foobar') FROM dual;
+-------------------------+
| INSTR('xbar', 'foobar') |
+-------------------------+
|
0 |
+-------------------------+
1 row in set
示例3:如有任一参数是一个二进制字符串,则它是字母大小写敏感的。
gbase> SELECT INSTR('foobarbar', BINARY 'Bar') FROM dual;
+----------------------------------+
| INSTR('foobarbar', BINARY 'Bar') |
+----------------------------------+
|
0 |
+----------------------------------+
1 row in set
示例4:从字符串“beiwelcometobeijing”第三个字符开始匹配,查找“bei”第一
次出现的位置。
gbase> SELECT INSTR ('beiwelcometobeijing','bei',3) FROM dual;
+-----------------------------------+
| INSTR('beiwelcometobeijing','bei',3) |
+-----------------------------------+
|
13 |
+-----------------------------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
695
示例5:
从字符串
“112111222222333333”
第一个字符开始匹配,
查找第二个
“11”
出现的位置。
gbase> SELECT INSTR ('112111222222333333','11',1,2) FROM dual;
+--------------------------------------+
| INSTR('112111222222333333','11',1,2) |
+--------------------------------------+
|
4 |
+--------------------------------------+
1 row in set
示例6:从字符串“welcometochina”倒数第一个字符开始匹配,查找第一个“e”
出现的位置。
gbase> SELECT INSTR ('welcometochina','e',-1,1) FROM dual;
+----------------------------------+
| INSTR('welcometochina','e',-1,1) |
+----------------------------------+
|
7 |
+----------------------------------+
1 row in set

函数说明
读取文件并将这一文件按照字符串的格式返回。若文件不存在,或不能被读取,
则函数返回值为NULL。
示例
示例1:读取a.txt 文件,并返回内容。
gbase> SELECT LOAD_FILE('/home/gbase/a.txt') FROM dual;
+--------------------------------+
| LOAD_FILE('/home/gbase/a.txt') |
+--------------------------------+
| adfdfafgagsdgewr
|
+--------------------------------+
1 row in set

集合派生的表使您能都处理集合表达式的元素(例如虚拟表中的行)。在 SELECT 语句的
FROM 子句中使用 TABLE 关键字来创建集合派生的表。数据库服务器支持 SELECT 、
INSERT 、UPDATE 和 DELETE 语句中的集合派生的表。
以下查询使用名为 c_table 的集合派生表访问 superstores_demo 数据库中 sales_rep 表
的 sales 列的元素。sales 列是其中两个字段 month 和amount 存储销售数据的未命名行类型
的集合。当 sales.month 等于 98-03 时,下列查询返回 sales.amount 的元素。由于内部选择
本身就是表达式,所以它不能对外部查询的每个迭代返回多个列值。外部查询指定
对 sales_rep 表的多少行进行求值。
图: 查询
SELECT (SELECT c_table.amount FROM TABLE (sales_rep.sales) c_table
WHERE c_table.month = '98-03')

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 147 -
FROM sales_rep;
图: 查询结果
(expression)

$47.22
$53.22
下列查询使用集合派生的表访问 sales 集合列中 rep_num 列等于 102 的元素。使用集合派
生的表,可以为表和列指定列名。如果没有为集合派生的表指定表名,那么数据库服务器
会自动创建表名。此示例为集合派生的表 c_table 指定派生列列表 s_month 和 s_amount。
图: 查询
SELECT * FROM TABLE((SELECT sales FROM sales_rep
WHERE sales_rep.rep_num = 102)) c_table(s_month, s_amount);
图: 查询结果
s_month s_amount

1998-03 $53.22
1998-04 $18.22
下列查询创建集合派生的表但不指定派生表或派生列名。除派生列采用 sales_rep 表中
的 sales 列的缺省自动名之外,该查询返回与图 3相同的结果。
图: 查询
SELECT * FROM TABLE((SELECT sales FROM sales_rep
WHERE sales_rep.rep_num = 102));
图: 查询结果
month amount

1998-03 $53.22
1998-04 $18.22
限制: 集合派生的表是只读的,因此它不能是 INSERT 、UPDATE 或 DELETE 语句的目标表或
可更新游标或视图的基础表。
有关集合派生的表的语法和限制的完整描述,请参阅《GBase 8s SQL 指南:语法》。