解锁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

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme