Hana SQL+正则表达式

目录

一、Pre 前言

二、知识点拆解

1)case when…then…else

2)json_value 函数

拓展资料

3)CAST 函数

拓展资料

4) ROUND 函数

5)occurences_regexpr 函数

拓展资料

6)正则表达式

拓展资料

三、整合分析

1)先说正则表达式

2)结合hana 函数

3)结合case when

四、废话


一、Pre 前言

hello,来摸鱼了

先贴条代码:

case when occurences_regexpr('([^[:digit:]-.])' in json_value(t2.item_properties,'$.min_score')) = 0then round(cast(json_value(t2.item_properties,'$.min_score') as double,1)
else null end as min_score

 item_properties 字段是t2表里的一个起说明作用的字段,值长这样:

{"up_score":"3","min_score":"-7"}

因为没看懂这段代码里的正则表达式,连带着看不懂这条代码要表达什么,正愁没事干,闲庭信步地研究了一上午,终于懂了,什么叫小而美啊,什么叫大道至简啊!

感兴趣的请听我逐层分析~

— —

算了,写到后面感觉,啊!层数好多啊,怎么还没说完,我说到哪一层了来着?

So,我就回来了,咱还是两步走,先说结论,不浪费彼此的生命哈。

这段代码所表达的意思是:

如果 t2.item_properties 里只有数字、负号和小数点 就把这个字段里的min_score值转成一位小数,如果有除此之外的其他字符就给min_score取空值。

还是那句话,大道至简。

好了,要看分析的跟我来。

二、知识点拆解
1)case when…then…else

这是一句sql里常见的分支判断语句,用来做字段条件筛选的

“手谈”一波demo如:

-- 创建数据库 test
create database test;
-- 切换使用数据库 test
use test;-- 创建表
create table test_tbl(id int primary key,gender int
);
-- 插入测试数据
insert into test_tbl values(0,1),(1,1),(2,0);
-- 查验数据
select * from test_tbl;select
id
,case when gender = 0 then '女'else '男'end as gender
from test_tbl;

以下为运行结果:

2)json_value函数

JSON_VALUE ( expression , path ):用于获取json字符串的值,获取到的值是string类型

json_value(t2.item_properties,'$.min_score')

 item_properties 字段是某表里的一个起说明作用的字段,大概值长这样

{"up_score":"3","min_score":"-7"}

这段代码的效果是,获取item_properties这个存储着json字符串的字段里,key为‘min_score’的value值: “-7” (字符串类型!)

拓展资料

​​​​​​JSON_VALUE 详解

JSON 路径表达式 - SQL Server | Microsoft Learn

3)CAST 函数

类型转换函数,语法是:

语法:CAST (expression AS data_type)

还是刚才那个demo,多加一列salary和一列age

ALTER TABLE test_tbl add age VARCHAR(20);
INSERT INTO test_tbl VALUES(3,0,'12',53.23);ALTER TABLE test_tbl add salary DOUBLE;
INSERT INTO test_tbl VALUES(4,0,'13',23.678);

使用CAST把数据转换成INT类型:

这里有个注意点是,在MySQL里string转的时候,需要在int前面加上前缀(signed or unsigned),否则会报错;不过我在Hive里试了下,是不需要前缀的(可能直接隐式转换了)

SELECTid
,gender
,cast(age as  SIGNED INT) as age
,salary
FROM test_tbl;

拓展资料

SQL中的cast()函数_cast sql-CSDN博客

4) ROUND函数

ROUND(number, num_digits)

可以修改数值字段的精度,比如

SELECT
round(3.1415) as num
,round(3.1415 ,1) as num1
,round(3.1415 ,2) as num2
,round(3.1415 ,3) as num3
;

5)occurences_regexpr 函数

这个是hana里的函数:用来返回字符串中正则表达式搜索到的匹配次数,返回的是数字,匹配几次就返回几

occurences_regexpr(正则表达式  IN  字符串|存储了字符串的字段)= int

拓展资料

SAP HANA函数汇总(3)——字符串函数_hana 字符串函数-CSDN博客

6)正则表达式

这一块就很大了,今天只说这个案例,其他详见拓展资料

其他全都去掉,只看正则表达式,它长这样:

[^[:digit:]-.]

1、首先,最外层的[ ]中括号

中括号单独出现的时候,它表示匹配括号内列举出的任意字符

2、但是,如果中括号内有一个^ 符号,变成这样 [^ ]

就代表:(取反)没在括号内列举出来的任意字符

3、第三层:[:digit:]

这是一个固定的写法,代表0-9的数字,可以看到也是由中括号[ ]发起的,代表匹配括号内列举出的任意字符,这个任意字符是什么呢,是digit(0-9)

好的。

4、后面两个字符:-.

大道至简,没有特殊的含义,就是本身的意思:负号和小数点

拓展资料

sql-正则表达式 - 知乎 (zhihu.com)

三、整合分析
1)先说正则表达式
[^[:digit:]-.]

结合正则表达式拆解的1-4点,这个正则表达式的意思是

        从内层:代表 数字、负号和小数点

        读取到外层:除了 数字、负号和小数点 以外的所有字符

所以整体要表示的意思就是:匹配除了 数字、负号和小数点 以外的所有字符

2)结合hana 函数
occurences_regexpr('([^[:digit:]-.])' in json_value(t2.item_properties,'$.min_score')) = 0

取到item_properties列中min_score的所有值,并拿着正则表达式去找,除了 数字、负号和小数点 以外的所有字符 有几个,当没有匹配到,也就是说,min_score的所有值里只有数字、负号和小数点这三种字符

3)结合case when
case when occurences_regexpr('([^[:digit:]-.])' in json_value(t2.item_properties,'$.min_score')) = 0then round(cast(json_value(t2.item_properties,'$.min_score') as double,1)
else null end as min_score

当:min_score的所有值里只有数字、负号和小数点这三种字符时(也就是数值类型的数据)时

就:把这个min_score转换成保留一位小数的double类型

否则:(也就是:非数值类型的数据)就把这个min_score的值为null

四、废话

研究这个玩意研究了将近一上午,写这个笔记又写了将近一下午。

行。

充实的一天。

然后我还是希望自己能成长为一个说人话的大佬,永远怀抱小白思维~

看得开心。

END


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439627.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式——2_0 职责链(Chain of Responsibility)

楼下一个男人并得要死,那家隔壁的一家唱着留声机,对面是弄孩子。楼上有两人狂笑;还有打牌声,河中的船上有女人哭她死去的母亲。人类的悲欢并不相通,我只觉得他们吵闹 ——鲁迅 文章目录 定义图纸一个例子:如…

SQL Server ISO镜像文件安装

参考:Sql Server ISO镜像文件安装指南_sqlserveriso文件怎么安装-CSDN博客 参考文件中的步骤基本相同,注意两点 1、尽量安装在D盘,有些组件默认必须安装在C盘,有些会报没有目录的情况 需要在D盘创建目录。 2、我没有windows本地…

都说在边缘落地视频智能分析难,但是这次有了大模型!

百度智能云边缘计算团队成功地将大模型、业务场景、边缘设备进行融合,使得边缘服务器 ECS上的算子具备了「场景自适应能力」,并实现了「采集 - 清洗 - 标注 - 训练 - 部署 - 迭代」全流程的自动化。 在视频智能分析场景中,研发人员使用少量业…

vue3 el-pagination 将组件中英文‘goto’ 修改 为 中文到‘第几’

效果如图&#xff1a; 要求&#xff1a;将英文中Go to 改为到第几 操作如下&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"> // 注意&#xff1a;这是重要部分<el-pagination //分页组件根据官…

Java 枚举enum类

Java枚举&#xff08;Enum&#xff09; 枚举 定义&#xff1a; Java枚举是一种特殊的类&#xff0c;用来表示一组固定的常量。 被enum关键字修饰的类型就是枚举类型 &#xff08;如果枚举不添加任何方法&#xff0c;枚举值默认为从0开始的有序数据。 比如定义一个枚举类表示…

更改远程桌面网关端口和远程Web应用程序端口

很多玩Home-Lab的小伙伴会使用远程桌面网关&#xff08;Remote Desktop Gateway&#xff09;来安全远程家庭内网的计算机&#xff0c;但由于国内电信法律法规的原因&#xff0c;普通家庭宽带并不能使用默认的443端口&#xff08;TCP&#xff09;和3391端口&#xff08;UDP&…

Glide完全解读

一&#xff0c;概述 glide作为android流行的图片加载框架&#xff0c;笔者认为有必要对此完全解读。glide提供了三级缓存、生命周期Destroy后自动移除缓存、自动适配ImageView&#xff0c;以及提供了各种对图片修饰的操作&#xff0c;如剪裁等。本文通过最简单的使用&#xff…

自然语言处理 TF-IDF

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

C语言——动态内存管理(经典例题)

题1、 为什么会崩溃呢&#xff1f;&#x1f914;&#x1f914;&#x1f914; #include <stdio.h> #include <stdlib.h> #include <string.h>void GetMemory(char** p) {*p (char*)malloc(100); } void Test(void) {char* str NULL;GetMemory(&str);str…

SV-8003V 网络寻呼话筒

SV-8003V是深圳锐科达电子有限公司的一款桌面式对讲主机SV-8003V同样作为广播对讲系统的核心组成部分&#xff0c;集成有全区广播、分区广播、单点呼叫、点对点对讲、以及监听等功能。SV-8003V使用铝合金拉丝面板&#xff0c;并配有高性能的鹅颈麦克风以及高保真的全频喇叭&…

如何获得《幻兽帕鲁》隐藏帕鲁唤夜兽?13000个配种配方查询 幻兽帕鲁Steam好评率还在涨 Mac苹果电脑玩幻兽帕鲁 Crossover玩Windows游戏

《幻兽帕鲁》是一款Steam平台热门游戏&#xff0c;开放式大陆和养成式冒险结合&#xff0c;成为2024首款热门游戏&#xff0c;不过由于官方仅发布了Windows版的游戏客户端&#xff0c;Mac用户无法直接玩&#xff0c;好在有Crossover这样的神器&#xff0c;让苹果电脑也能玩上《…

FastBee开源物联网平台2.0开源版发布啦!!!

一、项目介绍 物美智能(wumei-smart)更名为蜂信物联(FastBee)。 FastBee开源物联网平台&#xff0c;简单易用&#xff0c;更适合中小企业和个人学习使用。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等。 系统后端采用Spring boot&#xff1b;前端采用…