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')) = 0
    then 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里试了下,是不需要前缀的(可能直接隐式转换了)

SELECT
 id
,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')) = 0
    then 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


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++PythonC# 三语言OpenCV从零开发(7):图像的阈值

文章目录 相关链接前言阈值阈值使用代码PythonCCsharpcsharp代码问题 总结 相关链接 C&Python&Csharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程(附带课程课件资料课件笔记) OpenCV一个窗口同时显示多张图片 …

宋绪杰:我的大数据成长之旅 | 提升之路系列(三)

导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的“π”型人才,由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

SV-7102T网络播放解码器

SV-7102T是一款IP网络广播终端,具有10/100M以太网接口,其接收网络的音频数据,支持48KHz采样,192Kbps的音频流播放,并提供两路立体声15W的功率输出.SV-7102T设备只有网络广播功能,是一款简单的带功放输出的网…

Wireshark中的TCP协议包分析

Wireshark可以跟踪网络协议的通讯过程,本节通过TCP协议,在了解Wireshark使用的基础上,重温TCP协议的通讯过程。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传…

如何使用手机安装JuiceSSH远程连接本地Linux服务器

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址…

PAT-Apat甲级题1003(python和c++实现)下

PTA | 1003 Emergency 书接上回,上次我们使用了python实现无向带权图与DFS算法的设计,本次我们将使用C对本题进行解答,思路和题目分析同上一节内容,本次我们将在上一节的基础上继续实现。 okok现在又是激动人心的手搓代码时间&a…

MySQL解决 恢复从备份点到灾难点之间数据恢复

CSDN 成就一亿技术人! 今天分享一期 mysql中 备份之后发生灾难造成数据丢失 那么如何恢复中间的数据呢? 数据库数据高于一切(任何数据是不能丢失的) CSDN 成就一亿技术人! 目录 1.准备测试数据库 2.备份数据库 观…

Visual Studio 2022 C++ 生成dll或so文件在windows或linux下用C#调用

背景 开发中我们基本使用windows系统比较快捷,但是部署的时候我们又希望使用linux比较便宜,硬件产商还仅提供了c sdk!苦了我们做二次开发的码农。 方案 需要确认一件事,目前c这门语言不是跨平台的 第一个问题【C生成dll在window…

C语言——深入理解指针1

目录 1. 内存和地址1.1 内存 2. 指针变量和地址2.1 取地址操作符2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 如何拆解指针变量2.2.3 解引用操作符 2.3 指针的大小 3. 指针变量类型的意义3.1 指针的解引用3.2 指针 - 整数3.3 void*指针 4. const…

TypeScript 学习笔记(Day2)

「写在前面」 本文为 b 站黑马程序员 TypeScript 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. TypeScript 学习笔记(Day1) 目录 3 TypeScript 常…

百度输入法往选字框里强塞广告

关注卢松松,会经常给你分享一些我的经验和观点。 国内几乎100%的输入法都有广告,只是你们没发现而已!!! 百度输入法居然在输入法键盘上推送广告,近日,博主阑夕 表示,V2EX论坛上有…

【webrtc】‘ninja.exe‘ 不是内部或外部命令,也不是可运行的程序及vs2019 重新构建m98

werbtc 就是用ninja.exe 来构建找到了自己以前构建的webrtc 原版 m98 【m98 】webrtc ninja 构建 、example、tests 及OWT- P2P 项目P2PMFC-E2E-m98G:\CDN\rtcCli\webrtc-checkout\src找到了自己的deptools的路径 deptools里确实没有ninja.exe D:\SOFT\depot_tools\third_party…

【LeetCode每日一题】56. 合并区间插入区间

一、判断区间是否重叠 力扣 252. 会议室 给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。 思路分析 因为一个人在同一时刻只能参加一个会…

《HTML 简易速速上手小册》第7章:HTML 多媒体与嵌入内容(2024 最新版)

文章目录 7.1 在HTML中嵌入视频和音频7.1.1 基础知识7.1.2 案例 1&#xff1a;嵌入视频文件7.1.3 案例 2&#xff1a;嵌入音频文件7.1.4 案例 3&#xff1a;创建一个视频和音频混合的播放列表 7.2 使用 <iframe> 嵌入外部内容7.2.1 基础知识7.2.2 案例 1&#xff1a;嵌入…

基于数字签名技术的挑战/响应式认证方式

挑战/响应式认证方式简便灵活&#xff0c;实现起来也比较容易。当网络需要验证用户身份时&#xff0c;客户端向服务器提出登录请求&#xff1b;当服务器接收到客户端的验证请求时&#xff0c;服务器端向客户端发送一个随机数&#xff0c;这就是这种认证方式的“冲击&#xff08…

ArcGIS Pro如何新建字段

无论是地图制作还是数据分析&#xff0c;字段的操作是必不可少的&#xff0c;在某些时候现有的字段不能满足需求还需要新建字段&#xff0c;这里为大家讲解一下在ArcGIS Pro中怎么新建字段&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的水…

响应式商业服务专利版权申请 公司网站模板源码系统 带完整的搭建教程

随着互联网的普及和发展&#xff0c;企业对于建立专业、高效的网站的需求日益增长。为了满足这一市场需求&#xff0c;罗峰给大家分享一款响应式商业服务专利版权申请公司网站模板源码系统。该系统不仅功能强大&#xff0c;而且易于搭建和定制&#xff0c;极大地降低了企业建立…

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇2)

目录 T1工作在方式2时 T0工作在方式3时 四种工作方式的总结 定时计数器对输入信号的要求 定时计数器对的编程的一个要求 关于初值计算的问题 4种工作方式的最大定时时间的大小 关于编程方式的问题 实例分析 实例1 实例2 T1工作在方式2时 51单片机&#xff0c;有两个…

python3.8 安装缺少ssl、_ctypes模块解决办法

问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错&#xff1a; Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…

C语言递归篇章+系统讲解分析+深入理解递归+根源进行讲解+进制转换+操作环境+实例剖析+万字+百张图片精细化讲解

递归的讲解系统分析 什么是递归 本质上就是一种算法 最简单递归 栈溢出 没有限制条件 导致无穷尽的调用自己 从而溢出 最后变成死递归 _________________________________________________________________________________________________________________________________…