完整截取字符串函数(sql)

博客介绍了在数据库中实现截取字符串的函数。该函数接收需截取的字符串和要显示的中文字符个数作为参数,通过循环和条件判断来截取字符串,若字符串过长会添加省略号,最后返回截取后的字符串。

很多地方都需要用到的截取字符串的函数。很多地方都是在后台代码里实现。这里这个是在数据库中实现的一个函数。

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


ALTER  FUNCTION [dbo].SubStr
 (@string varchar(500),                        --需要截取的字符
  @length int                                 --要显示的中文字符的个数,一个中文字符等于两个英文字符
  )®
RETURNS varchar(500)
AS
BEGIN
declare @str varchar(500)                    --保存返回字符串
declare @count int                               
declare @while int                               
declare @strlen int                                --传进字符串的长度
declare @char varchar(2)                     --保存临时的字符
--初始化变量
set @count=0
set @while=1
set @strlen=len(@string)
set @str=''

if(@strlen>@length)                    --判断字符串是否比要显示的长
begin
    while @count<(@length-2)*2   --循环截取字符串
    begin
        set @char=substring(@string,@while,1)
        set @while=@while+1
        if(len(@char)=0)    --判断是否结束
            break;
        if(unicode(@char)>128)  --如果unicode码比128大则认为是中文
        begin   
            set @count=@count+2
        end
        else
        begin
            set @count=@count+1
        end
        set @str=@str+@char
        if ((@length*2)-@count)=5   --当截取到最后一个字符时
        begin
            set @char=substring(@string,@while,1)
            if (unicode(@char)<128 or len(@char)=0)
               begin
                 set @str=@str+@char
                 set @while=@while+1
               end
            else
               begin
                set @str=@str+'.'
               end
                set @count=@count+1
        end
    end
if @count>=(@length-2)*2 and @count    set @str=@str+'....'
end
else

begin
 set @str=@string
end
--*/ 
RETURN @str
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

### SQL 截取字符串函数及示例 在 SQL 中,用于截取字符串函数主要有 `SUBSTR`、`SUBSTRING` 和其他相关函数。这些函数可以根据不同的需求灵活地截取字符串的一部分。 #### 1. 使用 `SUBSTR` 函数 `SUBSTR` 是一种常见的字符串截取函数,适用于多种数据库系统(如 MySQL、Oracle 等)。其基本语法如下: ```sql SUBSTR(expression, start, length) ``` - `expression`:需要被截取字符串。 - `start`:开始截取的位置,位置从 1 开始计数[^2]。 - `length`:需要截取的字符长度,如果省略,则从 `start` 开始截取字符串末尾[^2]。 **示例**: ```sql SELECT SUBSTR('字符串截取示例', 1, CHAR_LENGTH('字符串截取示例') - 3); ``` 上述语句将从字符串 `'字符串截取示例'` 的第 1 个字符开始截取,直到倒数第 3 个字符结束[^1]。 #### 2. 使用 `SUBSTRING` 函数 `SUBSTRING` 是 SQL Server 中常用的字符串截取函数,功能与 `SUBSTR` 类似。其基本语法为: ```sql SUBSTRING(expression, start, length) ``` - `expression`:需要被截取字符串。 - `start`:开始截取的位置,位置从 1 开始计数[^3]。 - `length`:需要截取的字符长度。 **示例**: ```sql DECLARE @str VARCHAR(50) = 'abcdeBeforefghjkAfter'; SELECT SUBSTRING(@str, 1, CHARINDEX('Before', @str) - 2); -- 截取 "Before" 前的字符串[^4] SELECT SUBSTRING(@str, CHARINDEX('Before', @str) + 6, LEN(@str) + 6 - CHARINDEX('Before', @str)); -- 截取 "Before" 后的字符串[^4] ``` #### 3. 结合 `CHARINDEX` 和 `LEN` 函数 `CHARINDEX` 用于查找子字符串的位置,而 `LEN` 用于获取字符串的长度。通过结合这两个函数,可以实现更复杂的字符串截取逻辑。 **示例**: ```sql DECLARE @str VARCHAR(50) = 'abcdeBeforefghjkAfter'; SELECT CASE WHEN @str LIKE '%Before%' THEN SUBSTRING(@str, 1, CHARINDEX('Before', @str) - 2) ELSE @str END AS BeforePart; -- 截取 "Before" 前的部分[^4] SELECT CASE WHEN @str LIKE '%Before%' THEN SUBSTRING(@str, CHARINDEX('Before', @str) + 6, LEN(@str) + 6 - CHARINDEX('Before', @str)) ELSE NULL END AS AfterPart; -- 截取 "Before" 后的部分 ``` #### 4. 其他注意事项 - 在某些数据库中,`SUBSTR` 和 `SUBSTRING` 可能是同义词或具有相似功能,但具体行为可能略有不同,请根据所使用的数据库系统进行调整。 - 如果需要处理 Unicode 字符串,建议使用 `NCHAR` 或 `NVARCHAR` 数据类型,并确保函数支持 Unicode 编码[^3]。 ### 总结 SQL 提供了多种字符串截取函数,如 `SUBSTR` 和 `SUBSTRING`,能够满足不同的字符串操作需求。通过合理组合这些函数,可以实现复杂的字符串处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值