当前位置:首页 » 编程语言 » sqloraclesubstr

sqloraclesubstr

发布时间: 2025-04-10 05:18:23

sql中级进阶(三)hive的 collect_set 与oracle的wm_concat

Oracle的wm_concat用于多行合并为一行,原始版本使用逗号链接。例如:


(1)原始版本: 'aaa,bbb,ccc,ddd,eee'


修改版本使用'|'链接,例如:


(2)修改版本: 'aaa|bbb|ccc|ddd|eee'


(2)修改版本2: 'aaa|bbb|ccc|ddd|eee',并去重。


Oracle的SQL使用REGEXP_SUBSTR函数来一行拆分成多行。其格式为:


REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)


参数说明如下:



  • __srcstr:需要进行正则处理的字符串

  • __pattern:进行匹配的正则表达式

  • __position:起始位置,从第几个字符开始正则表达式匹配(默认为1)

  • __occurrence:标识第几个匹配组,默认为1

  • __modifier:模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)


Hive的collect_set函数用于去重地将同一分组的不同行数据聚合成一个集合。例如,创建原数据表:


CREATE TABLE stud (name string, area string, course string, score int);


向原数据表插入数据:


INSERT INTO TABLE stud VALUES('zhang3','bj','math',88);


查询表中数据:


SELECT * FROM stud;


将同一分组的数据聚合成一个集合:


SELECT course, collect_set(area), avg(score) FROM stud GROUP BY course;


使用下标可以取某一个集合元素:


SELECT course, collect_set(area)[0], avg(score) FROM stud GROUP BY course;


通常,此过程的最终写法可以使用concat_ws函数连接集合中的元素,例如:


concat_ws(',', collect_set(area))


输出结果为:sh,bj


连接符号也可以改为其他字符,例如'|'。


总结:Oracle和Hive中wm_concat与collect_set、collect_list函数的主要功能相似,都是用于数据聚合处理。它们的不同在于语法和应用场景。这些函数在数据处理和分析中广泛使用,提供了有效的方法来管理多行数据。

⑵ sql数据库截取字符串函数

SQL截取字符串函数:
A.截取从字符串左边开始N个字符

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='http://www.xrss.cn'
Select Left(@S1,4)
------------------------------------

显示结果: http

B.截取从字符串右边开始N个字符(例如取字符www.163.com)

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select right(@S1,11)
------------------------------------

显示结果: www.163.com

C.截取字符串中任意位置及长度(例如取字符www)

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='http://www.xrss.cn'
Select SUBSTRING(@S1,8,3)
------------------------------------

显示结果: www

以上例子皆是已知截取位置及长度,下面介绍未知位置的例子

2.截取未知位置的函数

A.截取指定字符串后的字符串(例如截取http://后面的字符串)

方法一:

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='http://www.xrss.cn'
Select Substring(@S1,CHARINDEX('www',@S1)+1,Len(@S1))

------------------------------------

显示结果: www.163.com

需要注意:CHARINDEX函数搜索字符串时,不区分大小写,因此CHARINDEX('www',@S1)也可以写成CHARINDEX('WWW',@S1)

方法二:(与方法一类似)

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='http://www.xrss.cn'
Select Substring(@S1,PATINDEX('%www%',@S1)+1,Len(@S1))
--此处也可以这样写:Select
Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1))
------------------------------------

显示结果: www.163.com

函数PATINDEX与CHARINDEX区别在于:前者可以参数一些参数,增加查询的功能

方法三:

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='http://www.xrss.cn'
Select REPLACE(@S1,'http://','')
------------------------------------

显示结果: www.163.com

利用字符替换函数REPLACE,将除需要显示字符串外的字符替换为空

方法四:

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='http://www.xrss.cn'
Select
STUFF(@S1,CHARINDEX('http://',@S1),Len('http://'),'')
------------------------------------

显示结果: www.163.com

函数STUFF与REPLACE区别在于:前者可以指定替换范围,而后者则是全部范围内替换

B.截取指定字符后的字符串(例如截取C:\Windows\test.txt中文件名)

与A不同的是,当搜索对象不是一个时,利用上面的方法只能搜索到第一个位置

方法一:

以下是代码片段:
Declare @S1 varchar(100)
Select @S1='C:\Windows\test.txt'
select right(@S1,charindex('\',REVERSE(@S1))-1)
-------------------------------------

显示结果: text.txt

利用函数REVERSE获取需要截取的字符串长度

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:620
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:350
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:64
php微信接口教程 发布:2025-04-16 17:07:30 浏览:290
android实现阴影 发布:2025-04-16 16:50:08 浏览:782
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:335
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:198
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:792
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:351
土压缩的本质 发布:2025-04-16 16:13:21 浏览:579