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

ACCESS/SQL SERVER保存软件版本号为整数类型,转成字符串

在 Access 中,若已将版本号(如1.3.15)转换为整数形式(如10315,即1*10000 + 3*100 + 15),可以通过 SQL 的数学运算反向解析出原始版本号格式(主版本.次版本.修订号)。

实现思路

通过除法和取余运算拆分整数:

  • 主版本号:整数除以10000的商(整数部分)
  • 次版本号:整数除以10000的余数,再除以100的商
  • 修订号:整数除以100的余数

SQL 查询示例

假设表名为SoftwareVersions,存储整数版本号的字段为NumericVersion,则查询语句如下:

SELECT NumericVersion,-- 主版本号:除以10000取整数部分Int(NumericVersion / 10000) AS Major,-- 次版本号:先取除以10000的余数,再除以100取整数部分Int((NumericVersion Mod 10000) / 100) AS Minor,-- 修订号:取除以100的余数NumericVersion Mod 100 AS Patch,-- 拼接为原始版本号格式(如1.3.15)Int(NumericVersion / 10000) & "." & Int((NumericVersion Mod 10000) / 100) & "." & (NumericVersion Mod 100) AS VersionText
FROM SoftwareVersions;

说明

  1. 运算逻辑

    • Int(NumericVersion / 10000):提取主版本(如10315 / 10000 = 1.0315,取整数得1
    • NumericVersion Mod 10000:先获取10315 - 1*10000 = 315,再除以100取整数得3(次版本)
    • NumericVersion Mod 100:直接获取10315除以100的余数15(修订号)
  2. 拼接格式

    • 使用&符号连接字符串(Access 中字符串拼接运算符为&,而非 SQL Server 的+
    • 最终得到1.3.15格式的版本号文本
  3. 适用范围

    • 仅适用于按主版本*10000 + 次版本*100 + 修订号规则转换的整数版本号
    • 若版本号规则变更(如基数调整为 1000),需同步修改除数(如10000001000等)

通过上述 SQL,可直接从整数形式反向解析出易读的版本号格式,方便查询和展示。


进阶方案:拆分字段法(多 INT 字段)

1. 实现逻辑

将版本号拆分为主、次、修订号字段,直接按数值排序:

CREATE TABLE SoftwareVersions (Id INT PRIMARY KEY,Major INT NOT NULL,Minor INT NOT NULL,Patch INT NOT NULL,INDEX IX_Version NONCLUSTERED (Major, Minor, Patch)
);
2. 插入与排序示例sql
-- 插入数据
INSERT INTO SoftwareVersions (Major, Minor, Patch)
VALUES (1, 3, 5),(1, 3, 51);-- 按版本号升序查询
SELECT CONCAT(Major, '.', Minor, '.', Patch) AS Version
FROM SoftwareVersions 
ORDER BY Major, Minor, Patch;
-- 结果:1.3.5 → 1.3.51

3. 优点与注意事项

  • 优点:排序最准确,适合复杂版本号(如包含预发布标识)。
  • 注意事项:增加表字段数量,需维护字段间一致性。

数值转换法(INT/BIGINT 存储)

1. 实现逻辑

将版本号各部分乘以基数的幂次后相加:

-- 公式:major * 1000000 + minor * 1000 + patch
DECLARE @version NVARCHAR(20) = '1.3.51';
SELECT CAST(PARSENAME(@version, 3) AS INT) * 1000000 +CAST(PARSENAME(@version, 2) AS INT) * 1000 +CAST(PARSENAME(@version, 1) AS INT) AS NumericVersion;
-- 输出:10351

2. 表结构设计

CREATE TABLE SoftwareVersions (Id INT PRIMARY KEY,Version NVARCHAR(20) NOT NULL,NumericVersion INT NOT NULL,  -- 存储转换后的数值INDEX IX_NumericVersion NONCLUSTERED (NumericVersion)
);
插入与排序示例sql
-- 插入数据
INSERT INTO SoftwareVersions (Version, NumericVersion)
VALUES ('1.3.5', 10305),('1.3.51', 10351);-- 按版本号升序查询
SELECT Version 
FROM SoftwareVersions 
ORDER BY NumericVersion;
-- 结果:1.3.5 → 1.3.51
http://www.dtcms.com/a/336574.html

相关文章:

  • 第13章《远程处理:一对一及一对多》——PowerShell Remoting 学习笔记
  • Windows_Server软件定义网络架构
  • MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型
  • 编程算法实例-阶乘
  • 天地图开发的优点
  • Steam 上传游戏包体操作步骤
  • Win11 文件资源管理器预览窗格显示 XAML 文件内容教程
  • K8S集群环境搭建(一)
  • STL 容器
  • 华东师范上海AiLab商汤!NaviMaster:学习适用于GUI和具身导航任务的统一策略
  • React学习(四)
  • 计算机视觉(一):nvidia与cuda介绍
  • 王树森深度强化学习DRL(一)RL基本概念+价值学习
  • 基于51单片机汽车自动照明灯超声波光敏远近光灯设计
  • Git安装使用
  • 【软考中级网络工程师】知识点之网络存储
  • 如何巧妙通过面试提高业务经验?
  • Spring IoC DI 终极指南:从造车模型到企业级开发实战
  • 嵌入式开发入门—电子元器件~半导体
  • Linux中iSCSI存储配置与管理指南
  • Java的网络攻防仿真演练系统
  • 深度学习·GFSS
  • C语言字符串操作汇总
  • 线程相关知识
  • NokoPrint:安卓平台上的便捷无线打印解决方案
  • 存储引擎 InnoDB
  • 【Python】Python 面向对象编程详解​
  • k8s-单主机Master集群部署+单个pod部署lnmp论坛服务(小白的“升级打怪”成长之路)
  • 集成电路学习:什么是SIFT尺度不变特征变换
  • oom 文件怎么导到visualvm分析家