解锁SQL无限可能 | 利用SQL实现13位条码检测算法

2024-09-04 10:04

本文主要是介绍解锁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位条码检测算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135708

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个