Clickhouse 字符串拆分 OR 一行转多行
Clickhouse 字符串拆分 OR 一行转多行
我想把 '123_456_142354_23543' 通过'_' 下划线进行拆分成 的结果

这个需求在excel 上也很容易实现,通过分列功能,然后转置一下就可以得到如上图一样的结果了,但是我们业务中不能通过excel 来实现,这是要 SQL代码层线上实现的。
现在我们来看看通过clickhouse 如何实现的,首先我们要学习几个clickhosue 的函数,这几个函数很好用,果然是俄罗斯的硬核黑科技,使用起来就那么简单,直接
第一个:字符串拆分函数 splitByChar(分隔符,s)
将字符串以'separator'拆分成多个子串。'separator'必须为仅包含一个字符的字符串常量。
返回拆分后的子串的数组。 如果分隔符出现在字符串的开头或结尾,或者如果有多个连续的分隔符,则将在对应位置填充空的子串。
select splitByChar('_', '123_456_142354_23543__') AS src
结果输出:

通过结果我们可以看到该字符串拆分后,组成来一个数组,后面的'_' 两下划线,就是指在多个连续的分隔符的情况下,则在对应的位置填充空的子串。
第二: arrayJoin函数
'arrayJoin'函数获取每一行并将他们展开到多行(unfold)。
此函数将数组作为参数,并将该行在结果集中复制数组元素个数。
除了应用此函数的列中的值之外,简单地复制列中的所有值;它被替换为相应的数组值。
SELECT arrayJoin([1, 2, 3] AS src) AS dst, 'Never Give Up', src;
结果:

现在大家看了这两个函数之后,应该对于字符串拆分有点头绪了吧,就两个函数搞定,就是那么简单粗暴。
select toInt32(arrayJoin(splitByChar('_', '123_456_142354_23543') AS src)) as number;

这样就得出我们想要的结果,注意Clickhouse 对于数据类型,大小写很敏感哦。
这只是一个字符串拆分的简单案例,以后遇到类似的问题可以触类旁通哦。
Clickhouse 字符串拆分 OR 一行转多行的更多相关文章
- Mysql 字符串拆分 OR 一行转多行
Mysql 字符串拆分 OR 一行转多行 需要了解的的几个mysql 函数: A.substring_index():字符串截取 substring_index(str,delim,count) ...
- help_topic表,以字符拆分,一行转多行
help_topic表是数据库mysql下的一个表 SUBSTRING_INDEX(s, delimiter, number) 返回从字符串 s 的第 number 个 ...
- MySQL 5.7.16 字符串拆分 -> 单列变多行记录(转发)
http://blog.csdn.net/mchdba/article/details/53889803 ----------------------------------------------- ...
- sql之cursor的简介和字符串拆分(split)与游标的使用
字符串拆分(split)与游标的使用 CREATE TABLE Plates ( ,), ) NOT NULL, [BusinessId] INT NOT NULL, ) ),),), SELECT ...
- mysql字符串拆分实现split功能
转自:https://blog.csdn.net/pjymyself/article/details/81668157有分隔符的字符串拆分题目要求数据库中 num字段值为: 实现的效果:需要将一行数据 ...
- Python | 字符串拆分和拼接及常用操作
一.字符串拆分 str = "hola ha1 ha2 china ha3 " # partition 从左侧找到第一个目标,切割成三组数据的[元组] str1 = str.par ...
- SQL2000/2005字符串拆分为列表通用函数
------------------------------------------------------------------ -- Author : htl258(Tony) -- Dat ...
- hive 实现一个字段多行转一行 和 一行转多行
1.多行转一行 多行转一行可以通过concat_ws(',',collect_set(col_name)) as col_new的方式实现,可以参考:https://www.cnblogs.com/s ...
- 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
原文:在论坛中出现的比较难的sql问题:27(字符串拆分.字符串合并.非连续数字的间隔范围.随机返回字符串) 在论坛中看到一个帖子,帖子中有一些sql方面的面试题,我觉得这些面试题很有代表性. 原帖的 ...
随机推荐
- selenium.webdriver元素定位失败
错误提示: Traceback (most recent call last): File "E:/PythonData/Login/venv/logIn.py", line 18 ...
- python之excel的封装
python之excel的封装 将所有excel的操作都使用面向对象的思维进行封装,即将所有操作都放入一个类中即为封装. 它将excel的处理极大程度的进行了简化操作 封装前需要先处理的操作: 1.在 ...
- 浅谈 PCA与SVD
前言 在用数据对模型进行训练时,通常会遇到维度过高,也就是数据的特征太多的问题,有时特征之间还存在一定的相关性,这时如果还使用原数据训练模型,模型的精度会大大下降,因此要降低数据的维度,同时新数据的特 ...
- 家庭版记账本app之常用控件的使用方法
现在先介绍在android开发的时候会用的相关的控件,做一个基本的了解方便我们之后对其进行相关具体的操作.下面是相应额详细情况: TextView android:layout_width 和 and ...
- redis持久化文件问题
问题: Can't open the append-only file Permission denied 发现缺少文件:/data/缺少appendonly.aof,dump.rdb文件. 手动创建 ...
- javascript入门 之 ztree(四 自定义Icon)
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - Standard Data </TITLE& ...
- MySQL学习之路6-数据表连接方式
内连接 关键字: inner join on 语句:select * from <a_table> inner join <b_table> on a.id = b.id ; ...
- 30.5 Map遍历方法
package day30_2_Map; import java.util.HashMap; import java.util.Map; import java.util.Set; /* 方法一.用e ...
- 力软敏捷框架集成布局插件(ce-layout)
最近用力软的框架觉得框架在布局这块不是很友好特别是对像css不是很好的程序员来说,大部分大家都是后端程序员. 所以决定集成一个和力软敏捷框架风格比较一致的布局插件进来 插件ce-layout ,下载地 ...
- 三、Pycharm2019.3.3的安装
一:什么是Pycahrm PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动 ...