您好,欢迎访问一九零五行业门户网

sql 删除左右字符之trim()函数用法

文章讲到了删除左右字符trim函数的用法,这是在sql中哦,用起来感觉没在php中方便,有需要的朋友参考一下操作过程吧。
程序中的trim函数大伙都知道的,但是要sql中只有ltrim,rtrim删除左、右空白字符,而不能删除指定字符,所以我们自己写一个。
要求:
1. 能删除前后空白,如 ' aa ' -> 'aa'
2. 能删除前后字符,并不受空白影响,如 ' ;aa' -> 'aa'
3. 删除前后字符后,需清除前后空格,如 '; aa' -> 'aa'
4. 需删除前后连续的字符,如 ';;;aa' -> 'aa'
网上也有一些别人写的,我觉得很不错,不过貌似没有完整的能达到要求的,所以自己动手写了一个。
创建函数代码如下:
 代码如下 复制代码
/******
object:  userdefinedfunction [dbo].[trim]   
script date: 11/18/2011 09:10:14
author: ef
******/
if exists (select * from sys.objects where object_id = object_id(n'[dbo].[trim]') and type in (n'fn', n'if', n'tf', n'fs', n'ft'))
drop function [dbo].[trim]
go
create function dbo.trim
(
    @source varchar(max),
    @char char(1)
)
returns varchar(max)
as
begin
    declare @i int;
    declare @returnstring varchar(max)
    set @returnstring = @source
    --清除前后空格
    set @returnstring = ltrim(rtrim(@returnstring))
    --删除左侧字符
    set @i = 0
    while @i=0
    begin
        if left(@returnstring,1) = @char
        set @returnstring = right(@returnstring,len(@returnstring)-1)
        else
        set @i=1
    end
    --删除右侧字符
    set @i = 0
    while @i=0
    begin
        if right(@returnstring,1) = @char
        set @returnstring = left(@returnstring,len(@returnstring)-1)
        else
        set @i=1
    end
    --清除前后空格
    set @returnstring = ltrim(rtrim(@returnstring))
    return @returnstring;
end
go
--测试
dbo.trim('asdfas;asdfasdfa;',';')
union all select dbo.trim(';asdfas;asdfasdfa;',';')
union all select dbo.trim('  ;asdfas;asdfasdfa;',';')
union all select dbo.trim('; asdfas;asdfasdfa;',';')
--结果
-------------------------------------------------------------------------
asdfas;asdfasdfa
asdfas;asdfasdfa
asdfas;asdfasdfa
asdfas;asdfasdfa
(4 行受影响)
其它类似信息

推荐信息