欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

以连接字符截取字符串

程序员文章站 2022-04-09 19:42:44
一些字符串是由"-"连接字符连接。 想以这个连接字符"-"对字符串时行截取前后字符。 可以写一个自定义函数: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- Author: Insus.NET -- Create date: 2019-0 ......

一些字符串是由"-"连接字符连接。

想以这个连接字符"-"对字符串时行截取前后字符。

可以写一个自定义函数:

 

set ansi_nulls on
go
set quoted_identifier on
go

-- =============================================
-- author:      insus.net
-- create date: 2019-05-27
-- update date: 2019-05-27
-- description: 截取字符串
-- =============================================
create function [dbo].[svf_cutoutstringwithhyphen]
(
    @string nvarchar(max)
)
returns @table table([front] nvarchar(max),[back] nvarchar(max))
as
begin  
   declare @hyphen varchar(1) = n'-'
    if @string like '%'+ @hyphen +'%'
    begin
    declare @hyphen_position int = charindex(@hyphen, @string)
        insert into @table ([front],[back])
        select substring(@string, 1, @hyphen_position - 1) as _from,
               substring(@string, @hyphen_position + 1, len(@string)- @hyphen_position) as _to    
    end
    else
    insert into @table ([front],[back]) values(n'',n'')
    return
end
go

 

例子:

下面有一临时表,存储一些字符:

 

create table #t ([id] int, [strings] nvarchar(40))
insert into #t([id],[strings]) values (1,'b-q'),(2,'23-45'),(3,'h-p'),(4,'adf'),(5,'adsf-asdf-asdf'),(6,'-adf-adf-'),(7,'-sfdg-klj-qer-'),(8,'shg-'),(9,'-sdfgs')

select [id],[strings] from #t


现使用上面的自定义函数对临时表中[string]字符进行分割。得到的结果如下:

 

select [id],[strings],[front],[back] from #t
cross apply 
[dbo].[svf_cutoutstringwithhyphen]([strings])