【SQL】靠谱的TRIM函数,附赠过程一枚
2013-12-26 15:18
239 查看
SQL中有LTRIM和RTRIM这两个函数分别用于去除字符串的首、尾空格,缺乏常见的能同时去除首尾的TRIM函数,另外,这俩函数都只对【空格】有效,所以如果首尾是制表符、换行符等等【空白】,它们是不处理的~起码到sql 2k8 r2仍然如此。鉴于此,我写了个靠谱的TRIM函数,上代码:
一开始的思路是从字串的第一个字符开始遍历判断,若是【空格、制表符、回车、换行】,就去除,然后再从最右边来一遍。但操蛋的LEN函数是不计尾随空格的,所以改由从右边开始遍历,并将计就计利用LEN这个操蛋设定去除右边空格,完了再来处理左边。
另外附赠一枚基于该函数的一个过程,作用是去除指定表字段的空白,可选去除中间空白(默认是不去除):
该过程对于一些允许用户填写,但写入的时候又未在程序中做处理的字段有修整作用。此外,该过程除了用到上面的TRIM函数,还用到另一个叫RemoveAllWhiteSpace的函数,用于去除字串中所有空白,该函数也一并附上:
文毕。
/*--------------------- 函数:去除头尾空白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
文毕。
相关文章推荐
- SQL SERVER 生成MYSQL建表脚本
- SQL SERVER 生成ORACLE建表脚本
- mysql常用的命令
- Activation successful 数据库邮件无法发送
- mysql索引类型详细介绍与用法分析
- SQL SERVER 只有MDF文件的恢复
- MySQL单列索引和组合索引的选择效率与explain分析
- shmall参数设置不当引起数据库启动时报out of memory报错
- mysql数据库管理备份运维常用命令
- ORACLE DDL锁介绍
- ubuntu安装启动redis
- excel数据导入plsql
- 第二招:Powerdesigner15-用jdbc链接MySQL实现逆向工程步骤
- 使用Oracle Wrap工具加密你的代码
- Oracle 压缩表,表空间等操作
- Oracle wrap 和 unwrap( 加密与解密) 说明
- 用MongoDB实现MapReduce(翻译)
- Oracle 并行讲解
- #搭建高可用mongodb集群(一)——配置mongodb
- sql 建表