Mysql 字段值批量自增或自减(坐标系数据,(x,y))

话不多说,直接上sql

用到的函数

SUBSTRING_INDEX:
用处:

到达分隔符之前从给定的字符串(str)返回一个子字符串

语法:
sql 复制代码
SUBSTRING_INDEX(str,delim,count)
解释:

str是源字符串,delim是分隔符,count是指定需要分隔到什么位置。

count>0 表示从前往后第几个分隔符

count<0 表示从后往前(倒数)第几个分隔符

多个分隔符指定数字

举例:
1.以,为分隔符,到第一个,结束,输出结果就是112.000,
sql 复制代码
SELECT SUBSTRING_INDEX('112.000,113.000', ',', 1);
2.以,为分隔符,到最后1个,结束,输出结果就是113.000,
sql 复制代码
SELECT SUBSTRING_INDEX('112.000,113.000', ',', -1);
3.多个,分隔符 取中间,多个函数拼接即可,先截取正数第二个分隔符之前的,然后再截取倒数第一个分隔符之前的
sql 复制代码
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('112.000,114.000,113.000','.', 2),'.',-1);
CAST:
用处:

将任何类型的值转换为具有指定类型的值

语法:
sql 复制代码
CAST(**value** AS **datatype**)
解释:

value是字段值(要转换的),datatype是转换类型,AS关键字用于分隔两个参数。

datatype参数取值

值类型 说明
DATE 将value转换成'YYYY-MM-DD'格式
DATETIME 将value转换成'YYYY-MM-DD HH:MM:SS'格式
TIME 将value转换成'HH:MM:SS'格式
CHAR 将value转换成CHAR(固定长度的字符串)格式
SIGNED 将value转换成INT(有符号的整数)格式
UNSIGNED 将value转换成INT(无符号的整数)格式
DECIMAL 将value转换成FLOAT(浮点数)格式
BINARY 将value转换成二进制格式
举例:
1. 将值转换为DECIMAL数据类型
sql 复制代码
-- DECIMAL(数值精度,小数点保留长度)
-- DECIMAL(10,1)可以存储最多具有8位整数和2位小数的数字
-- 精度与小数位数分别为10与1
-- 精度是总的数字位数,包括小数点左边和右边位数的总和
-- 小数位数是小数点右边的位数
-- 1.2
SELECT CAST('1.2' AS DECIMAL(10,1));
2.将值转换为DATETIME数据类型
sql 复制代码
-- 2025-04-01 00:00:00
SELECT CAST('2022-04-01' AS DATETIME); 

先查询下,SUBSTRING_INDEX

sql 复制代码
select SUBSTRING_INDEX(top_left_point,',',-1),SUBSTRING_INDEX(bottom_right_point,',',-1)  from map

建议先开启事务,以防万一

sql 复制代码
-- 开启事务
START TRANSACTION; 
sql 复制代码
-- 在原有基础上 Y轴减去183
UPDATE map
SET
    top_left_point = CONCAT(
        SUBSTRING_INDEX(top_left_point, ',', 1), 
        ',', 
        CAST(SUBSTRING_INDEX(top_left_point, ',', -1) AS DECIMAL(10,1)) - 183
    ),
    bottom_right_point = CONCAT(
        SUBSTRING_INDEX(bottom_right_point, ',', 1), 
        ',', 
        CAST(SUBSTRING_INDEX(bottom_right_point, ',', -1) AS DECIMAL(10,1)) - 183
    )
WHERE tenant_id = '000031';
sql 复制代码
-- -- 在原有基础上 X轴加上 101
UPDATE map
SET
    top_left_point = CONCAT(
        CAST(SUBSTRING_INDEX(top_left_point, ',', 1) AS DECIMAL(10,1)) + 101,  
        ',',
        SUBSTRING_INDEX(top_left_point, ',', -1)
    ),
    bottom_right_point = CONCAT(
        CAST(SUBSTRING_INDEX(bottom_right_point, ',', 1) AS DECIMAL(10,1)) + 101,
        ',',
        SUBSTRING_INDEX(bottom_right_point, ',', -1) 
    )
WHERE tenant_id = '000031';
sql 复制代码
-- 两个同时操作 加和减

UPDATE map
SET
    top_left_point = CONCAT(
        CAST(SUBSTRING_INDEX(top_left_point, ',', 1) AS DECIMAL(10,1)) + 101,  
        ',',
        CAST(SUBSTRING_INDEX(top_left_point, ',', -1) AS DECIMAL(10,1)) - 183  
    ),
    bottom_right_point = CONCAT(
        CAST(SUBSTRING_INDEX(bottom_right_point, ',', 1) AS DECIMAL(10,1)) + 101, 
        ',',
        CAST(SUBSTRING_INDEX(bottom_right_point, ',', -1) AS DECIMAL(10,1)) - 183 
    )
WHERE tenant_id = '000031';
sql 复制代码
-- 校验是否修改正确

SELECT 
    top_left_point, 
    bottom_right_point 
FROM map
WHERE tenant_id = '000031';
不管改的对不对,都别忘了释放事务哦
sql 复制代码
-- 提交事务(确定修改)
COMMIT
-- 回滚事务(取消修改)
ROLLBACK;
相关推荐
十年程序梦13 分钟前
2026最新国内省市区县表,mysql表格
mysql
xyouyuweizhu27 分钟前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python
代码方舟38 分钟前
零信任架构实战:基于天远人企关联构建自动化供应链核心企业关联穿透与利益冲突审查网关
java·人工智能·架构·自动化
liyi_hz20081 小时前
O2OA(翱途) V10.1 即将发布|功能再升级,安全再加固,协同更高效!
java·javascript·windows·开源软件
骑着蜗牛撵大象3271 小时前
AI Agent 工程化开发实战(三):用 StateGraph 给智能体搭一条可回放的状态流水线
java·开发语言·jvm·ai·状态管理·langgraph·stategraph
Random Glow1 小时前
二级索引与回表:一次回表到底多贵
数据库·mysql·性能优化·innodb·索引
鬼手点金2 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
摇滚侠2 小时前
《On Java 中文版 基础卷》阅读笔记 初始化和清理 08
java·开发语言·笔记
海鸥-w2 小时前
Redis 配置与排错说明
java·数据库·redis·bootstrap
XiYang-DING2 小时前
P4009.和为K的子数组个数 & P5522.异或和为 k 的子数组个数
java·开发语言