本文主要是介绍解锁SQL无限可能 | 利用SQL实现13位条码检测算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
0 需求分析
1 数据准备
2 问题分析
3 小结
数字化建设通关指南专栏原价99,现在活动价39.9,按照阶梯式增长,直到恢复原价
0 需求分析
算法:给定一个n位的数字字符串,取出这个条码字符串的前n-1位数字,用公式计算,看结果是都等于n位。
公式如下:
(1)将每个奇数位的数字相加得到S1
(2)将每个偶数位的数字相加得到S2
(3)用S1减去S2,将结果对10取模,然后计算绝对值。计算条码检查和的公式为
abs(mod(s1-s2),10)
假设给定13位条码 :'2837232811227',按照上述规则进行验证。
1 数据准备
with check_sum as ( select '2837232811227' str )
2 问题分析
利用算法原理进行简单推导,看看具体是如何工作的
check_sum('283723281122')
=abs(mod((2+3++2+2+1+2) - (8+7+3+8+1+2),10))
=abs(mod(
(2-8+3-7+2-3+2-8+1-1+2-2),10
))
=abs(mod(
-17,10
))
=abs(-7) =7
第一步:先将字符串展开
with check_sum as (select '2837232811227' str)select pos + 1 id, val
from check_sumlateral view posexplode(split(str, '')) tmp as pos, val
where val <> ''
第二步:计算前12行,奇数行与偶数行差值的累计值。即S1-S2
with check_sum as (select '2837232811227' str)
select id, casewhen id <= max_id - 1then sum(case when mod(id, 2) = 0 then -val else val end) over (order by id) end s1_s2from (select pos + 1 id, val, max(pos + 1) over () max_idfrom check_sumlateral view posexplode(split(str, '')) tmp as pos, valwhere val <> '') t;
第三步:计算 abs(mod(s1-s2),10)
with check_sum as (select '2837232811227' str)
select id, casewhen id = max_id - 1 then abs(mod(s1_s2, 10)) end mod_s1_s2
from (select id, max_id, val, casewhen id <= max_id - 1then sum(case when mod(id, 2) = 0 then -val else val end) over (order by id) end s1_s2from (select pos + 1 id, val, max(pos + 1) over () max_idfrom check_sumlateral view posexplode(split(str, '')) tmp as pos, valwhere val <> '') t) t
3 小结
本文利用SQL分析了一种13位条码检测算法。关于此类利用SQL处理算法的问题很多,具体请参考我的“数字化建设通关指南”中的SQL进阶技巧,我把这些规律技巧进行了总结。
数字化建设通关指南
专栏原价99,现在活动价39.9,按照阶梯式增长,直到恢复原价
主要内容:
(1)SQL进阶实战技巧
可以参考如下教程,具体链接如下
SQL很简单,可你却写不好?也许这才是SQL最好的教程_sql语句写的很烂怎么办-CSDN博客
上面链接中的文章及技巧会不定期更新。
(2)数仓建模实战技巧和个人心得
1)新人入职新公司后应如何快速了解业务?
2)以业务视角看宽表化建设?
3) 维度建模 or 关系型建模?
4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?
5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系 该由谁来搭建?
6)如何优雅设计DWS层?DWS层模型好坏该如何评价?
7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?
8) 数据架构的选择,mpp or hadoop?
9)数仓团队应如何体现自己的业务价值,讲好数据故事?
10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关 系?
11)数据部门如何与业务部门沟通,并规划指引业务需求?
文章不限于以上内容,有新的想法也会及时更新到该专栏。
具体专栏链接如下:
这篇关于解锁SQL无限可能 | 利用SQL实现13位条码检测算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!