sql - 在sql表的列中添加连字符
问题描述
我需要帮助了解如何在值如下的列中添加连字符,8601881, 9700800,2170
连字符应该在最后一个数字之前。列中有多个这样的值,数字的长度可以是 5,6 或更多,但连字符必须在最后一个数字之前。
任何帮助是极大的赞赏。
预期输出应如下所示,860188-1,970080-0,217-0
解决方案
select concat(substring(value, 1, len(value)-1), '-', substring(value, len(value), 1)) from data;create table data(value varchar(100));
这是完整的示例:
create table data(value varchar(100));
insert into data values('6789567');
insert into data values('98765434');
insert into data values('1234567');
insert into data values('876545');
insert into data values('342365');
select concat(substring(value, 1, len(value)-1), '-', substring(value, len(value), 1)) from data;
| (No column name) |
| :--------------- |
| 678956-7 |
| 9876543-4 |
| 123456-7 |
| 87654-5 |
| 34236-5 |
如果 OP 意味着列值中可以有多个数字,则解决方案是:
create table data1(value varchar(100));
insert into data1 values('6789567,5467474,846364');
insert into data1 values('98765434,6474644,76866,68696');
insert into data1 values('1234567,35637373');
select t.value, string_agg(concat(substring(token.value, 1, len(token.value)-1), '-',
substring(token.value, len(token.value), 1)), ',') as result
from data1 t cross apply string_split(value, ',') as token group by t.value;
value | result
:--------------------------- | :-------------------------------
1234567,35637373 | 123456-7,3563737-3
6789567,5467474,846364 | 678956-7,546747-4,84636-4
98765434,6474644,76866,68696 | 9876543-4,647464-4,7686-6,6869-6
推荐阅读
- java - 将值从一个对象继承到另一个对象
- c - 这个发布的三次样条极值代码有错误吗?
- slack - 是否有 slack api 命令可以在频道中的所有客户端机器上播放铃声或调音?
- google-apps-script - 如何使用 Apps 脚本创建多个表单,这些表单可以输入到一张带有 SHEET TITLES 的表单中
- ios - ARKit ARCamera 变换错误地顺时针旋转了 90 度
- c# - 如何按数据表的名称删除列
- c# - 如何设计应用程序以使用计算字段对查询进行建模
- python - 如何在机器学习中将字符串数据类型转换为整数?
- node.js - 如何使用 wrtc 向 TURN 服务器发送 UDP 数据包?
- material-components-web - 将方向更改为 RTL 时,通知徽章未占据左侧位置