相关文章推荐
痛苦的帽子  ·  CoreWebView2.CapturePr ...·  2 月前    · 
独立的松鼠  ·  ERROR [HY000] ...·  4 月前    · 
讲道义的韭菜  ·  .NET Core Web API ...·  8 月前    · 
咆哮的墨镜  ·  处理ASP.NET Core Blazor ...·  1 年前    · 

去掉字符串前后指定的字符串的SQL函数

如果前后分隔符号过多,计算就不够准确,下面为您介绍的SQL函数用来去掉字符串前后指定的字符串,供您参考。

如果前后分隔符号过多,计算就不够准确,下面为您介绍的 SQL 函数用来去掉字符串前后指定的字符串,供您参考,希望对您学习SQL函数使用有所启迪。

去掉前导字符串
CREATE FUNCTION Ltrimstring
(@string NVARCHAR(4000),--原始字符串
@trimStr NVARCHAR(50))--要去掉的前导字符串
RETURNS NVARCHAR(4000)
BEGIN
set @string =isnull(@string ,'')--2010.05.14更改
--当原始字符串长度>0就检查前导字符串是否出现在原始字符串前面
WHILE (Len(@string) > 0)
BEGIN
IF LEFT(@string,Len(@trimStr)) = @trimStr
BEGIN
--如果出现了前导字符串就将忽略前导字符串,从字符串尾部开始截取原始字符串,长度为原始字符串的长度-前导字符串的长度
SET @string = RIGHT(@string,Len(@string) - Len(@trimStr))
--如果原始字符串前面没有出现相匹配的前导字符串则中断循环
BREAK
RETURN @string
GO#p#

去掉尾部字符串

CREATE FUNCTION Rtrimstring
(@string NVARCHAR(4000),
@trimStr NVARCHAR(50))
RETURNS NVARCHAR(4000)
BEGIN
set @string =isnull(@string ,'')--2010.05.14更改
WHILE (Len(@string) > 0)
BEGIN
IF RIGHT(@string,Len(@trimStr)) = @trimStr
BEGIN
--与去掉前导字符串函数正好相反,截取的时候是从左侧截取,从而忽略尾部的匹配字符串
SET @string = LEFT(@string,Len(@string) - Len(@trimStr))
BREAK
RETURN @string
END#p#

--去掉首尾指定的字符串--2010.05.14更改
create function TrimString (@string NVARCHAR(4000),--原始字符串
@trimStr NVARCHAR(50))--要去掉的前导字符串
RETURNS NVARCHAR(4000)
BEGIN
set @string=isnull( @string,'');
--当原始字符串长度>0就检查前导字符串是否出现在原始字符串前面
if (Len(@string) > 0)
BEGIN
set @string=dbo.rtrimstring( dbo.ltrimstring(@string,@trimstr),@trimstr)
RETURN @string

这2个函数只能去掉前导或尾部字符串,不能去掉中间匹配的字符串

如 ',,,我再,,,测试,,,',如果选择去掉前后‘,,,’,则结果是‘我再,,,测试’,因为去掉中间的可以用Replace()来实现

declare @string nvarchar(500),@trimString nvarchar(500)
select @string=',,,我再,,,测试,,,',@trimString=','
print dbo.LTrimString(@string,@trimString)
print dbo.RTrimString(@string,@trimString)
print dbo.LTrimString(dbo.RTrimString(@string,@trimString),@trimString)
--依次输出
我再,,,测试,,,
,,,我再,,,测试
我再,,,测试

【编辑推荐】

输入小写金额,输出大写金额的SQL函数写法

基于时间SQL函数详解

教您使用SQL中的TRUNC函数

SQL中表变量的不足

详解SQL中循环结构的使用