SQL Server自定义字符串操作函数

1.计算一个字符串在其他字符串中出现的次数

-- 计算inner_string在outer_string中出现的次数
if   object_id ( ' COUNT_CHARACTERS ' , ' p ' is   not   null
drop   proc  COUNT_CHARACTERS
go
 
CREATE   PROC  COUNT_CHARACTERS
           
@outer_string     VARCHAR ( 400 ),
           
@inner_string   VARCHAR ( 50 )
AS
  
DECLARE    @i   INT ,
                 
@n   INT
  
  
SET   @n   =   0
  
  
WHILE   CHARINDEX ( @inner_string , @outer_string <>   0
    
BEGIN
      
SELECT   @i   =   CHARINDEX ( @inner_string , @outer_string )
      
      
SET   @outer_string   =   SUBSTRING ( @outer_string ,( @i   +   LEN ( @inner_string )),
                                  (
LEN ( @outer_string -  ( @i   +   LEN ( @inner_string ) - 1  )))
           
      
SET   @n   =   @n   +   1
    
END
    
    
select   @n
GO

 

2.得到字符串中起始点到终点之间的字符串,包括终点位置 

-- 得到字符串中起始点到终点之间的字符串,包括终点位置
if   object_id ( ' GET_STRING_BETWEEN_TWO_CHARACTERS ' , ' p ' is   not   null
drop   proc  GET_STRING_BETWEEN_TWO_CHARACTERS
go

CREATE   PROC  GET_STRING_BETWEEN_TWO_CHARACTERS
           
@string   VARCHAR ( 2000 ),
           
@start    INT ,
           
@end      INT
AS
  
DECLARE    @output   VARCHAR ( 2000 )
  
  
IF   @start   >   LEN ( @string )
    
BEGIN
      
SELECT   ' 起始点位置大于字符串长度 '
      
      
RETURN
    
END
  
ELSE
    
IF   @start   >=   @end
      
BEGIN
        
SELECT   ' 结束点位置小于起始点 '
        
        
RETURN
      
END
  
  
SELECT   @output   =   SUBSTRING ( @string , @start ,( @end   -   @start   + 1 ))
  
  
select   @output
GO

 

3.字符串部分反向

字符串全部反向用函数REVERSE

 

if   object_id ( ' REVERSE_ORDER ' , ' FN ' is   not   null
drop   function  REVERSE_ORDER
go

CREATE   FUNCTION  REVERSE_ORDER
               (
@string   VARCHAR ( 8000 ),
                
@start    INT ,
                
@end     INT )
RETURNS   VARCHAR ( 8000 )
AS
  
BEGIN
    
IF   @start   >   @end
      
BEGIN
        
RETURN   ' 结束点位置小于起始点 '
      
END
    
    
IF   @start   >   LEN ( @string )
        
OR   @end   >   LEN ( @string )
      
BEGIN
        
RETURN   ' 请在字符串的长度内取值 '
      
END
    
  
declare   @OutPut   varchar ( 8000 )

  
if   @start   >   1    
  
begin
    
select   @OutPut   =   SUBSTRING ( @string , 1 , @start   -   1 )
    
select   @OutPut   =    @OutPut   +   REVERSE ( SUBSTRING ( @string , @start ,( @end   -   @start   +   1 )))  
  
end
  
else   begin
    
select   @OutPut   =    REVERSE ( SUBSTRING ( @string , @start ,( @end   -   @start   +   1 )))  
  
end
 
  
if   @end   <   len ( @string )
  
begin
     
select   @OutPut   =   @OutPut   +   SUBSTRING ( @string , @end + 1 ,( LEN ( @string -   @end ))
  
end

    
RETURN    @OutPut
  
END

 

 

 

 

 

转载于:https://www.cnblogs.com/yanghaibo/articles/1683553.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值