当前位置: 首页 > news >正文

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


 

相关文章:

Hana SQL+正则表达式

目录 一、Pre 前言 二、知识点拆解 1)case when…then…else 2)json_value 函数 拓展资料 3)CAST 函数 拓展资料 4) ROUND 函数 5)occurences_regexpr 函数 拓展资料 6)正则表达式 拓展资料 三、整合分析…...

【笔记】顺利通过EMC试验(16-41)-视频笔记

目录 视频链接 P1:电子设备中有哪些主要骚扰源 P2:怎样减小DC模块的骚扰 P3:PCB上的辐射源究竟在哪里 P4:怎样控制PCB板的电磁辐射 P5:多层线路板是解决电磁兼容问题的简单方法 P6:怎样处理地线上的裂缝 P7:怎样降低时钟信号的辐射 P8:为什么IO接口的处理特别重要 P9…...

Qlik Sense 调用NPrinting生成On-Demand报表

安装 Qlik Sense On-Demand 报表控件 On-Demand 报表控件添加按钮,该按钮按需生成 Qlik NPrinting 报表。它包括在 Dashboard bundle 中。 当您希望用户能够使用应用程序中的选择作为过滤器在 Qlik Sense 中打印预定义 Qlik NPrinting 报表时,On-Deman…...

ElasticSearch重建/创建/删除索引操作 - 第501篇

历史文章(文章累计500) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 E…...

数据写入HBase(scala)

package sourceimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytesobject ffff {def main(args: Array[String]): Unit {//hbase连接配置val conf …...

Codeforces Round 799 (Div. 4)

目录 A. Marathon B. All Distinct C. Where’s the Bishop? D. The Clock E. Binary Deque F. 3SUM G. 2^Sort H. Gambling A. Marathon 直接模拟 void solve() {int ans0;for(int i1;i<4;i) {cin>>a[i];if(i>1&&a[i]>a[1]) ans;}cout<&l…...

为什么要用云手机养tiktok账号

在拓展海外电商市场的过程中&#xff0c;许多用户选择采用tiktok短视频平台引流的策略&#xff0c;以提升在电商平台上的流量&#xff0c;吸引更多消费者。而要进行tiktok引流&#xff0c;养号是必不可少的一个环节。tiktok云手机成为实现国内跨境养号的一种有效方式&#xff0…...

vue pc端网页实现自适应

一、基本原理 pc端做自适应可以用rem来实现&#xff0c;啥是rem&#xff0c;自己百度 二、新建rem.ts文件 // rem等比适配配置文件 // 基准大小 const baseSize 14 // 设置 rem 函数 function setRem () {// 当前页面宽度相对于 1920宽的缩放比例&#xff0c;可根据自己需要…...

Android 13以上版本读写SD卡权限适配

如题&#xff0c;最近工作上处理的问题&#xff0c;把解决方案简单逻列出来&#xff0c;供有需要的朋友参考之 解决方案&#xff1a; 1、配置权限 <uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /><uses-permission android:name&q…...

并查集模板:食物链详解

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int N 50010;static int n,m; //n个动物,m局判断static int[] p new int[N]; //p[i]是i的根节点static int[] d new int[N]; //d[i]表示i到…...

使用WAF防御网络上的隐蔽威胁之反序列化攻击

​ 什么是反序列化 反序列化是将数据结构或对象状态从某种格式转换回对象的过程。这种格式通常是二进制流或者字符串&#xff08;如JSON、XML&#xff09;&#xff0c;它是对象序列化&#xff08;即对象转换为可存储或可传输格式&#xff09;的逆过程。 反序列化的安全风险 反…...

05. 交换机的基本配置

文章目录 一. 初识交换机1.1. 交换机的概述1.2. Ethernet_ll格式1.3. MAC分类1.4. 冲突域1.5. 广播域1.6. 交换机的原理1.7. 交换机的3种转发行为 二. 初识ARP2.1. ARP概述2.2. ARP报文格式2.3. ARP的分类2.4. 免费ARP的作用 三. 实验专题3.1. 实验1&#xff1a;交换机的基本原…...

yolo将标签数据打到原图上形成目标框

第一章 目标&#xff1a;为了查看自己在标注标签时是否准确&#xff0c;写了这段代码来将标注的框打到原图上 第二章 步骤&#xff1a;进行反归一化得到坐标画出矩形框 第二行是目标图片对应的txt,第三行是目标图片 第三章 全部代码如下&#xff1a; import cv2 import …...

002-00-02【大红ai源码】dolphinscheduler3.2.0 源码环境搭建------by孤山村头王大爷家女儿大红

【ai阅读源码-dolphinscheduler】 DolphinScheduler 开发手册1、软件要求2、克隆代码库3、编译打包4、代码风格5、新建数据库&#xff0c;导入元数据。6&#xff0c; 启动后端6.1 启动api-server 6.2 启动master-server6.3 启动worker-server 7 启动前端 DolphinScheduler 开发…...

python-自动化篇-运维-监控-如何使⽤Python处理和解析⽇志⽂件?-实操记录

文章目录 1. 选择日志文件格式&#xff1a; 确定要处理的日志文件的格式。不同的日志文件可能具有不同的格式&#xff0c;如文本日志、CSV、JSON、XML等。了解日志文件的格式对解析⾮常重要。2. 打开日志文件&#xff1a; 使⽤Python的文件操作功能打开日志文件&#xff0c;以便…...

代码随想录算法训练营DAY6 | 哈希表(1)

DAY5休息一天&#xff0c;今天重启~ 哈希表理论基础&#xff1a;代码随想录 Java hash实现 &#xff1a;java 哈希表-CSDN博客 一、LeetCode 242 有效的字母异位词 题目链接&#xff1a;242.有效的字母异位词 思路&#xff1a;设置字典 class Solution {public boolean isAnag…...

【嵌入式学习】C++QT-Day3-C++基础

笔记 见我的博客&#xff1a;https://lingjun.life/wiki/EmbeddedNote/19Cpp 作业 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函…...

表贴式PMSM的直接转矩控制(DTC)MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 表贴式PMSM的直接转矩控制(DTC),直接使用滞环控制对转矩和磁链进行控制&#xff0c;相对于传统的FOC控制而言&#xff0c;其不需要进行解耦变换&#xff0c;在此次的有以下几点需要注意&#xff1a…...

详解OpenHarmony各部分文件在XR806上的编译顺序

大家好&#xff0c;今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道&#xff0c;一提到编译可能大家会感到有点儿头疼&#xff0c;但请放心&#xff0c;我不会让大家头疼的。我们要明白&#xff0c;在开始写代码之前&#xff0c;了解整个程序的编译路径是十分有必…...

【美团】无人机-大数据开发工程师

更新时间&#xff1a;2024/01/29 工作地点&#xff1a;北京市 事业群&#xff1a;到家事业群 工作经验&#xff1a;3年 部门介绍 为了更好地提升城市即时配送的效率与体验&#xff0c;美团于2017年启动了无人机配送服务的探索&#xff0c;通过科技创新推动履约工具变革&#x…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...