[MSSQL]固定长度添加分隔符函数

本文介绍了如何使用SQL函数AddSplitSign和AddSplitSignV2.0来对固定长度的字符串添加分隔符,例如将GUID字符串每4个字符进行分隔,方便阅读和处理。示例中展示了去除原始字符串中的'-'字符,并用':'或'-'作为新的分隔符。
摘要由CSDN通过智能技术生成
-- =============================================
-- Author:      maco_wang
-- Create date: 2012-01-08
-- Description:	固定长度添加分隔符函数
-- =============================================

create function AddSplitSign
(
	@colname varchar(8000),
    @len int  --固定长度
)
returns varchar(8000)
as
begin
    declare @j int set @j=ceiling(len(@colname)/(@len*1.0))-1
    while(@j>0)
        begin
            set @colname=stuff(@colname,@len*@j+1,0,'-')
            set @j=@j-1
        end
    return @colname
end


declare @T table (col varchar(36))
insert into @T
select 'AEB3166C-B7C6-4C5D-BF0B-F452626EF266' union all
select '79EA0FFB-7BF5-4F49-BEC4-E0C6F5ADC3AB' union all
select '5B7B59AF-AF2A-4CB1-8CCC-27AB75A6A845' union all
select 'B829A0A2-6B08-42F0-86B3-69D276664579' union all
select '0F0E1FCC-3256-4364-9FE8-80B180A9C6FB' union all
select '5C3D3CED-C650-4E8D-AF16-0870D0500581' union all
select '9B2C0A05-46CE-4CFE-85FB-E6C460C5C771' union all
select '79F6DE39-BEC5-4D55-8A67-021FD8C72280' union all
select 'E163704D-0248-4AD1-B4E5-FDC374B60304' union all
select 'D8A1B062-CC90-41F9-A359-108263C7CF47' union all
select '9A2227ED-C2D8-4BDD-B2C9-182485E659C9'

--将表中-去掉,然后每4个一分割
select col=dbo.AddSplitSign(replace(col,'-',''),4) from @T

--查看结果
/*
col
---------------------------------------
AEB3-166C-B7C6-4C5D-BF0B-F452-626E-F266
79EA-0FFB-7BF5-4F49-BEC4-E0C6-F5AD-C3AB
5B7B-59AF-AF2A-4CB1-8CCC-27AB-75A6-A845
B829-A0A2-6B08-42F0-86B3-69D2-7666-4579
0F0E-1FCC-3256-4364-9FE8-80B1-80A9-C6FB
5C3D-3CED-C650-4E8D-AF16-0870-D050-0581
9B2C-0A05-46CE-4CFE-85FB-E6C4-60C5-C771
79F6-DE39-BEC5-4D55-8A67-021F-D8C7-2280
E163-704D-0248-4AD1-B4E5-FDC3-74B6-0304
D8A1-B062-CC90-41F9-A359-1082-63C7-CF47
9A22-27ED-C2D8-4BDD-B2C9-1824-85E6-59C9

(11 row(s) affected)
*/

--固定长度添加分隔符函数
create function [AddSplitSignV2.0]
(
	@colname varchar(8000),
    @len int,  --固定长度
    @sign varchar(10)
)
returns varchar(8000)
as
begin
    declare @j int set @j=ceiling(len(@colname)/(@len*1.0))-1
    while(@j>0)
        begin
            set @colname=stuff(@colname,@len*@j+1,0,@sign)
            set @j=@j-1
        end
    return @colname
end


declare @T table (col varchar(36))
insert into @T
select 'AEB3166C-B7C6-4C5D-BF0B-F452626EF266' union all
select '79EA0FFB-7BF5-4F49-BEC4-E0C6F5ADC3AB' union all
select '5B7B59AF-AF2A-4CB1-8CCC-27AB75A6A845' union all
select 'B829A0A2-6B08-42F0-86B3-69D276664579' union all
select '0F0E1FCC-3256-4364-9FE8-80B180A9C6FB' union all
select '5C3D3CED-C650-4E8D-AF16-0870D0500581' union all
select '9B2C0A05-46CE-4CFE-85FB-E6C460C5C771' union all
select '79F6DE39-BEC5-4D55-8A67-021FD8C72280' union all
select 'E163704D-0248-4AD1-B4E5-FDC374B60304' union all
select 'D8A1B062-CC90-41F9-A359-108263C7CF47' union all
select '9A2227ED-C2D8-4BDD-B2C9-182485E659C9'

--将表中"-"去掉,然后每间隔4个字符添加一个":"分割符
select col=dbo.[AddSplitSignV2.0](replace(col,'-',''),4,':') from @T

--查看结果
/*
col
---------------------------------------
AEB3:166C:B7C6:4C5D:BF0B:F452:626E:F266
79EA:0FFB:7BF5:4F49:BEC4:E0C6:F5AD:C3AB
5B7B:59AF:AF2A:4CB1:8CCC:27AB:75A6:A845
B829:A0A2:6B08:42F0:86B3:69D2:7666:4579
0F0E:1FCC:3256:4364:9FE8:80B1:80A9:C6FB
5C3D:3CED:C650:4E8D:AF16:0870:D050:0581
9B2C:0A05:46CE:4CFE:85FB:E6C4:60C5:C771
79F6:DE39:BEC5:4D55:8A67:021F:D8C7:2280
E163:704D:0248:4AD1:B4E5:FDC3:74B6:0304
D8A1:B062:CC90:41F9:A359:1082:63C7:CF47
9A22:27ED:C2D8:4BDD:B2C9:1824:85E6:59C9

(11 row(s) affected)

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值