SQL中有LTRIM和RTRIM这两个函数分别用于去除字符串的首、尾空格,缺乏常见的能同时去除首尾的TRIM函数,另外,这俩函数都只对【空格】有效,所以如果首尾是制表符、换行符等等【空白】,它们是不处理的~起码到sql 2k8 r2仍然如此。鉴于此,我写了个靠谱的TRIM函数,上代码:
/*---------------------
函数:去除头尾空白v0.01
Author:AhDung
Update:201311301716
Rem:由于LEN不统计尾随空格,所以做特别处理
---------------------*/
ALTER FUNCTION dbo.Trim(@s VARCHAR(7999))
RETURNS VARCHAR(7999) AS
BEGIN
WHILE ASCII(RIGHT(@s,1)) IN (9,10,13,32)
BEGIN
SET @s=LEFT(@s, CASE ASCII(RIGHT(@s,1)) WHEN 32 THEN LEN(@s) ELSE LEN(@s)-1 END)
END
WHILE ASCII(@s) IN (9,10,13,32)
BEGIN
SET @s=RIGHT(@s,LEN(@s)-1)
END
RETURN @s
END
一开始的思路是从字串的第一个字符开始遍历判断,若是【空格、制表符、回车、换行】,就去除,然后再从最右边来一遍。但操蛋的LEN函数是不计尾随空格的,所以改由从右边开始遍历,并将计就计利用LEN这个操蛋设定去除右边空格,完了再来处理左边。
另外附赠一枚基于该函数的一个过程,作用是去除指定表字段的空白,可选去除中间空白(默认是不去除):
/*-----------------------------------
过程:去除指定表字段的头尾空白v0.01
Author:AhDung
Update:201311301720
-----------------------------------*/
ALTER PROC PTrimField
@TbName sysname
, @ColName sysname
, @RemoveAll BIT = 0 --是否移除中间的空白。默认=否
AS
SET NOCOUNT ON
DECLARE @sql VARCHAR(1000) = 'UPDATE ['+@TbName+']
SET ['+@ColName+'] = dbo.'+CASE @RemoveAll WHEN 0 THEN 'Trim' ELSE 'RemoveAllWhiteSpace' END+'(['+@ColName+'])
WHERE PATINDEX(''%[''+CHAR(32)+CHAR(9)+CHAR(10)+CHAR(13)+'']%'',['+@ColName+'])>0'
EXEC (@sql)
该过程对于一些允许用户填写,但写入的时候又未在程序中做处理的字段有修整作用。此外,该过程除了用到上面的TRIM函数,还用到另一个叫RemoveAllWhiteSpace的函数,用于去除字串中所有空白,该函数也一并附上:
/*---------------------
函数:移除所有空白v0.01
Author:AhDung
Update:201311301716
---------------------*/
CREATE FUNCTION dbo.RemoveAllWhiteSpace(@s VARCHAR(7999))
RETURNS VARCHAR(7999) AS
BEGIN
RETURN REPLACE(REPLACE(REPLACE(REPLACE(@s,CHAR(32),''),CHAR(9),''),CHAR(10),''),CHAR(13),'')
END
文毕。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· DeepSeek智能编程
· 精选4款基于.NET开源、功能强大的通讯调试工具
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?