目录
一、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