首页 > 解决方案 > 在sql表的列中添加连字符

问题描述

我需要帮助了解如何在值如下的列中添加连字符,8601881, 9700800,2170

连字符应该在最后一个数字之前。列中有多个这样的值,数字的长度可以是 5,6 或更多,但连字符必须在最后一个数字之前。

任何帮助是极大的赞赏。

预期输出应如下所示,860188-1,970080-0,217-0

标签: sqlsql-server

解决方案


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

推荐阅读