SQL中按分隔符拆分字符串

2023-11-13

一、Oracle数据库按分隔符拆分字符串

1,应用函数

REGEXP_SUBSTR

2,语法

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

3,参数解释

  1. __srcstr :需要进行正则处理的字符串
  2. __pattern :进行匹配的正则表达式
  3. __position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
  4. __occurrence :标识第几个匹配组,默认为1
  5. __modifier :模式('i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’。)

4,测试SQL

select regexp_substr('1,2,3','[^,]+',1,1) result from dual;

运行结果:

1

5,REGEXP_SUBSTR+CONNECT BY 使用

按分隔符拆分字符串+CONNECT BY 动态参数
测试SQL:

SELECT 
REGEXP_SUBSTR ('1,2,3,4,5', '[^,]+', 1,ROWNUM) 
FROM dual 
CONNECT BY ROWNUM <= LENGTH( '1,2,3,4,5' ) - LENGTH(regexp_replace('1,2,3,4,5', ',', '' )) + 1

运行结果:

1
2
3
4
5

二、hive数据库按分隔符拆分字符串

1,split()函数

(1)定义

split()函数是用于切分数据,也就是将一串字符串切割成了一个数组

(2)语法

语法:split(string str, string pat)
返回值:数组类型array

(3)参数解释

string str :待分割字符串
string pat:分割符

(4)测试

测试SQL:

select split ('wo,shi,xiao,ming',',');

运行结果:

["wo","shi","xiao","ming"]

2,explode函数

(1)定义

explode()函数是用于打散行的函数,将一行的数据拆分成一列

(2)语法

explode(array/map类型)
select explode(array_col) as new_col from table_name

(3)测试

测试SQL:

select explode(array("wo","shi","xiao","ming")) as word;

运行结果:

wo
shi
xiao
ming

(4)explode函数的局限性

  1. 不能关联原有的表中的其他字段
  2. 不能与group by、cluster by、distribute by、sort by联用
  3. 不能进行UDTF嵌套
  4. 参数只能是两种类型
  5. 一个select后面只能获得一个explode产生的视图,如果要显示多个列,则需要将多个视图合并。lateral view就是做这样的事的

3,lateral view

(1)定义

Lateral View用于和UDTF函数(explode、split)结合来使用
首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表。虚拟表相当于再和主表关联, 从而达到添加“UDTF生成的字段“以外字段的目的, 即主表里的字段或者主表运算后的字段。
主要解决在select使用UDTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段、以及多个UDTF的问题

(2)语法

lateral view UDTF(expression) table_view as new_column;

(3)参数解释

  1. UDTF(expression):复合逻辑规则的UDTF函数,最常用的explode
  2. table_view : 对应的虚拟表的表名
  3. new_col: 虚拟表里存放的有效字段

(4)测试

select col_type   -- 已拆分数据
from table_name
lateral view explode(split(col,',')) t as col_type   --col 为需要拆分的字段
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL中按分隔符拆分字符串 的相关文章

  • Oracle sqlldr是否并行处理多个INFILE

    我正在使用 sqlldr 将数据加载到 Oracle RAC 在 Linux 上 并且我正在尝试提高数据加载的性能 我正在使用 直接路径 并且为 sqlldr 设置了 parallel true 而且 由于我的服务器是多核的 所以默认情况下
  • 如何在oracle sql查询中提取括号之间的字符串

    我正在尝试从字符串中提取括号之间的值 我怎样才能做到这一点 例如 我有这个字符串 Gupta Abha 01792 我想得到括号之间的结果 即 01792 我正在尝试编写这样的查询 select substr Gupta Abha 0179
  • Oracle中“NUMBER”和“NUMBER(*,0)”相同吗?

    在甲骨文中文档 http docs oracle com cd B28359 01 server 111 b28318 datatype htm i22289据说 数字 精度 小数位数 如果未指定精度 则该列将存储给定的值 如果 未指定比例
  • Python、Oracle DB、列中的 XML 数据,获取 cx_Oracle.Object

    我正在使用 python 从 Oracle DB 获取数据 所有行都有一个包含 XML 数据的列 当我使用 python 打印从 Oracle DB 获取的数据时 包含 XML 数据的列将打印为 0x7fffe373b960 处的 cx O
  • 带触发器的物化视图?

    我可以在物化视图上创建触发器吗 我用的是甲骨文10g 是的你可以 请小心 这是什么Oracle 文档 http download oracle com docs cd B19306 01 server 102 b14200 statemen
  • 如何使用 SQLPLUS 假脱机到 CSV 格式的文件?

    我想将一些查询提取为 CSV 输出格式 不幸的是 我无法使用任何奇特的 SQL 客户端或任何语言来做到这一点 我必须使用SQLPLUS 我该怎么做 您还可以使用以下内容 尽管它确实在字段之间引入了空格 set colsep separate
  • 想要在Sql中获取两列的差异

    我想获取表的列的差异 我们的列名称为 Planned date 所以现在我想获取这两列的差异 A Planned Date of stop1 Planned Date of stop5 那么我如何编写查询来获取 A 的值 下面是我编写的示例
  • 我怎样才能等到所有调度程序作业完成?

    我是我的包裹 我正在排队多个作业 如下所示 dbms scheduler create job job name gt p job name job type gt PLSQL BLOCK job action gt p sql code
  • 是什么原因导致 Oracle tkprof 文件中 CPU 时间和运行时间之间存在差异

    在分析 Oracle tkprof 跟踪文件时 我注意到有时 cpu 时间和经过的时间之间存在很大差异 但我不知道是什么原因造成的 例如 call count cpu elapsed disk query current rows Pars
  • 表与视图的性能

    最近开始使用一个数据库 其中的惯例是为每个表创建一个视图 如果您假设表和视图之间存在一对一的映射 我想知道是否有人可以告诉我这样做对性能的影响 顺便说一句 这是在 Oracle 上的 假设问题是关于非物化视图 实际上取决于视图所基于的查询以
  • 如何从 Oracle 中获取格式化的 XML

    我对 Oracle 缺乏经验 并且在将数据导出为 XML 时遇到问题 我已经设法让这个查询正常工作 但 XML 的格式似乎是固定的 对我来说不起作用 这是查询 SELECT value em getClobVal AS output FRO
  • Oracle SQL 触发器上的变异表

    我正在尝试执行触发器 但出现变异表错误 SQL 代码是这样的 CREATE OR REPLACE TRIGGER CHK Apartado D BEFORE INSERT OR UPDATE ON CONTRACTS FOR EACH RO
  • 当网站停止时,Oracle 数据提供程序会固定 IIS 工作进程

    我们在 Oracle 11g 第 2 版中遇到了一个严重的问题 其中 w3wp 进程接管了整个处理器核心 并且调试显示 Oracle 数据提供程序无限地抛出 ThreadAbortException 开发人员通过执行以下操作发现了此问题 1
  • 关于pl/sql存储程序文本的问题

    我使用 TOAD 进行 PL SQL 开发 在 TOAD 中 当我输入过程名称并按 f4 时 我可以看到该过程的源代码 我认为 TOAD 从 v sqltext 视图获取源代码 为了证实我的想法 我写了一个查询 select from v
  • 是否可以通过编写单独的mapreduce程序并行执行Hive查询?

    我问了一些关于提高 Hive 查询性能的问题 一些答案与映射器和减速器的数量有关 我尝试使用多个映射器和减速器 但在执行中没有看到任何差异 不知道为什么 可能是我没有以正确的方式做 或者我错过了其他东西 我想知道是否可以并行执行 Hive
  • 休眠可能会导致此“获取顺序错误”错误吗?

    我尝试使用 Hibernate Spring JPA 执行此查询 在 Oracle DB 中 Query value DELETE from MY TABLE where ID ID nativeQuery true void delete
  • 尝试在 Oracle 11.2.0.2.0(64 位)中获取连接时出现 java.lang.ArithmeticException

    我目前正在 Oracle 中使用 Java 存储过程 并且在尝试在 Java 代码中获取连接时看到一些奇怪的行为 我的Java被打包成jar文件 然后使用以下命令部署到Oracle中loadjava命令行实用程序 Apackage然后在数据
  • Oracle 11g OFFSET FETCH 给出错误

    我正在进行查询并尝试从数据库中获取随机数量的行 但 Oracle 一直告诉我我的命令尚未正确结束 select from random table order by random column name offset 0 rows fetc
  • 数百个别名/同义词与数据库表的完全限定名称

    考虑到多个模式中的数百个数据库表 在创建存储过程和视图时 您是否建议使用别名 同义词或完全限定名称 给定一些 schema table 像这样 Orders OrderHeader Production LineThroughput Sal
  • Oracle存储过程使用数组作为表插入的参数

    我一直在寻找一个明显的例子 但没有运气 抱歉 如果已经回答了 我正在尝试做一些非常简单的事情 一个存储过程 它将获取输入并将它们插入到表中 我希望它获取多行数组并一次全部插入 我认为这很简单 但我还没有找到一个可以展示我的例子 在很多例子中

随机推荐

  • Windows+Ubuntu双系统下卸载Ubuntu

    记录一下自己卸载Ubuntu的步骤 防止以后再卸载重新找教程 1 删除Ubuntu的分区 步骤1 打开 我的电脑 选择 管理 点击 磁盘管理 步骤2 确定Ubuntu系统所在的磁盘分区 我的是磁盘1的磁盘分区6 7 8 9 然后一一删除 选
  • python每日一题_Python每日一题 001

    Talk is Cheap show me the code Linus Torvalds 将你的 QQ 头像 或者微博头像 右上角加上红色的数字 类似于微信未读信息数量那种提示效果 类似于图中效果 环境准备 安装PIL模块 Windows
  • MySQL之KEY分区和LINEAR KEY分区

    KEY分区 KEY分区与HASH分区相似 当然有不同点 1 在HASH分区中 可以使用整数列或者基于列值的表达式 即PARTITION BY HASH expr 而在KEY分区中 直接基于列 PARTITION BY KEY column
  • css清除默认样式

    清除默认样式 初始化样式 清除内外边距 margin 0 padding 0 自减盒子模型 box sizing border box ul ol 清除默认圆点 list style none a 取消下划线 text decoration
  • 华南x79 主板说明书下载_主板说明书找不到 机箱连线照样秒安装

    点击上方 电脑爱好者关注我们 小伙伴们在安装 升级电脑的时候 在主板上安装各种配件应该问题不大 但是连线呢 特别是机箱上那些细碎的小接口们 即使照着说明书都要琢磨半天 如果是老主板 一下子找不到说明书怎么办 这里小编就跟大家说一些简单的办法
  • windows上 nginx 配置好了access.log路径后,但是访问日志并没有记录

    windows 上配置 nginx access log 日志 1 问题 2 解决方案 2 1 为当前文件夹配置权限 3 结果 1 问题 之前 本机上配置了 nginx access log 日志 但是 并没有 记录 当时因为太忙了 就没有
  • 【Mybatis源码分析】动态标签的底层原理,DynamicSqlSource源码分析

    DynamicSqlSource 源码分析 一 DynamicSqlSource 源码分析 DynamicContext源码分析 SqlNode源码分析 动态SQL标签 Mybatis 动态SQL标签 举例 调试 SqlNode源码分析 M
  • Ubuntu/Linux下安装DosBox配置汇编环境

    Ubuntu Linux下安装DosBox配置汇编环境 微信关注公众号 夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给 感谢支持 一 首先我们去DosBox官网下载DosBox 0 73 或者直接启用终端命令行输入以下代码 s
  • leveldb深度剖析-查询流程

    至此 将插入流程以及压缩流程都已介绍完毕了 本篇主要介绍查询流程 一 查询流程 首先来看一下查询接口具体实现内容 查询 param options 查询选项 param key 查询key param value 输出参数 如果找到则赋值给
  • TypeScript 基础教程,适合新手

    TypeScript 基本用法 本章介绍 TypeScript 的一些最基本的语法和用法 最全教程 https tut qzxdp cn typescript 在线工具 https tools qzxdp cn 类型声明 TypeScrip
  • 本地部署IIS服务及MQTT服务

    本地部署IIS服务及MQTT服务 概述 配置IIS 安装windows功能 配置应用程序 打开IIS服务 安装aspnetcore runtime 安装dotnet hosting 检查 添加网站 配置应用程序 配置IIS通过外部IP访问
  • YOLOv5 or YOLOv8 快速划分训练集 验证集 测试集

    该脚本实现了将原始数据集自动划分为yolo训练数据集排列形式 import os import random import shutil 该脚本实现了将原始数据集自动划分为yolo训练数据集排列形式 目录排序如下 old root data
  • 【mind+】机器人对话互动游戏编程

    目录 前言 不要多言 请看下面的代码 一 代码 1 机器人回答问题 2 机器人互动和状态改变 前言 应用mind 软件写一个机器人互动的程序 程序要求 1 提出问题 机器人做出相对应的回答 2 点击机器人 它做出随机语录回复 提前准备 添加
  • 【SSL_1232】雷达覆盖

    思路 以一个点作为平角 计算几何统计 c o d e code code include
  • 在虚拟机中win10启用远程桌面的方法

    1 打开虚拟机 选择此电脑 右键属性 2 选择远程桌面 开启服务 3 打开cmd 输入ipconfig 查看IP 4 在宿主机上按住win r快捷键 输入matsc 打开远程桌面连接 输入虚拟机的ip 5 输入虚拟机的用户名和密码 6 连接
  • 虚拟机网络桥接,详细操作步骤,本地连接虚拟机

    虚拟机网络桥接 文章目录 虚拟机网络桥接 一 首先查看主机连接网络的网关 二 打开虚拟机的worksation服务 三 修改主机的VMnet8的IPV4属性 四 修改虚拟机的workstation的虚拟网络 五 修改VMnet8的IP 网关
  • ATK&ck靶场系列二

    信息收集 nmap sP 192 168 111 0 24 nmap sS T4 A v p 192 168 111 80 nmap sS T4 A v p 192 168 111 80 Starting Nmap 7 93 https n
  • 录音时分离左右声道的数据

    平台录音默认为8通道数据 保存到文件中取左右声道数据 当mic 1时 取左声道数据 当mic 2时 取右声道数据 private byte splitStereoPcm byte data int monoLength data lengt
  • Spring Bean基础

    Spring Bean基础 1 1 定义Spring Bean 1 1 1 什么是BeanDefinition 1 2 通过BeanDefinition构建Bean 1 3 注册Bean BeanDefinition 注册 1 4 实例化S
  • SQL中按分隔符拆分字符串

    一 Oracle数据库按分隔符拆分字符串 1 应用函数 REGEXP SUBSTR 2 语法 REGEXP SUBSTR String pattern position occurrence modifier 3 参数解释 srcstr 需