SQL技术问询:如何为表添加对Value列执行MOD 10计算的计算列
为数据表添加MOD 10计算列的实现方法
嘿,这个需求挺常见的,我来给你分几种主流数据库的情况讲讲具体怎么实现👇
1. SQL Server
在SQL Server里,直接用%运算符表示取模,通过ALTER TABLE语句就能添加计算列:
ALTER TABLE YourTableName ADD Value_Mod10 AS (Value % 10);
这里需要把YourTableName替换成你实际的数据表名,Value_Mod10是新增计算列的名称,括号里的Value % 10就是对目标列执行MOD 10的核心逻辑。
2. MySQL / MariaDB
MySQL支持两种写法:用%运算符或者MOD()函数,同时还能选择计算列是存储型(STORED)还是虚拟型(VIRTUAL):
- 存储型(实际存储数据,查询更快):
ALTER TABLE YourTableName ADD COLUMN Value_Mod10 INT GENERATED ALWAYS AS (Value % 10) STORED;
- 虚拟型(不存储数据,查询时实时计算,节省空间):
ALTER TABLE YourTableName ADD COLUMN Value_Mod10 INT GENERATED ALWAYS AS (MOD(Value, 10)) VIRTUAL;
3. PostgreSQL
PostgreSQL同样支持%和mod()函数两种写法,添加计算列的语法如下:
ALTER TABLE YourTableName ADD COLUMN Value_Mod10 INT GENERATED ALWAYS AS (Value % 10) STORED;
或者用函数形式:
ALTER TABLE YourTableName ADD COLUMN Value_Mod10 INT GENERATED ALWAYS AS (mod(Value, 10)) STORED;
4. Oracle
Oracle里需要用MOD()函数来实现取模,添加虚拟计算列的语法是:
ALTER TABLE YourTableName ADD Value_Mod10 NUMBER GENERATED ALWAYS AS (MOD(Value, 10)) VIRTUAL;
几个小提醒
- 记得把
YourTableName和Value_Mod10换成你实际需要的表名和列名 - 如果
Value列存在NULL值,取模结果也会是NULL,你可以用COALESCE(Value % 10, 0)把NULL转为0,根据自己的业务需求调整 - 存储型和虚拟型计算列各有优劣:存储型占空间但查询快,虚拟型省空间但每次查询都要计算,按需选择就好
内容的提问来源于stack exchange,提问作者Swulph
相关产品推荐
相关产品推荐

