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

文毕。

【SQL】靠谱的TRIM函数,附赠过程一枚的更多相关文章

  1. sql trim()函数去掉两头空格

    1.sql trim()函数去掉两头空格 sql语法中没有直接去除两头空格的函数,但有ltrim()去除左空格rtrim()去除右空格. 合起来用就是sql的trim()函数,即select ltri ...

  2. SQL TRIM()函数去除字符串头尾空格

    SQL TRIM()函数去除字符串头尾空格 SQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾.最常见的用途是移除字首或字尾的空白.这个函数在不同的资料库中有不同的名称: MySQL: T ...

  3. SQL中的trim函数

    Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数有更深的认识. 如果提到Oracle TRIM函数,最简单的 ...

  4. Sql总结之Sql--常用函数

    控制流函数 IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境 ...

  5. linux之SQL语句简明教程---TRIM

    SQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾.最常见的用途是移除字首或字尾的空白.这个函数在不同的资料库中有不同的名称: MySQL: TRIM( ), RTRIM( ), LTRI ...

  6. 剑指Offer——常用SQL语句、存储过程和函数

    剑指Offer--常用SQL语句.存储过程和函数 常用SQL语句 1.在MySQL数据库建立多对多的数据表关系 2.授权.取消授权 grant.revoke grant select, insert, ...

  7. oracle中的trim()函数详解

    1.先看一下Oracle TRIM函数的完整语法描述 TRIM([ { { LEADING | TRAILING | BOTH }[ trim_character ]| trim_character} ...

  8. oracle trim函数用法详解

    在oracle数据库中,trim一般都是用在删除字符串两边的空格.实际上,trim也可以用来删除字符串两边的指定字符.并且trim指定删除的字符串只能是单个字符Oracle TRIM函数是很常见的函数 ...

  9. SQL Fundamentals || Single-Row Functions || 字符函数 character functions

    SQL Fundamentals || Oracle SQL语言   SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...

随机推荐

  1. java提高篇(二九)-----Vector

    在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...

  2. C#Light 再推荐,顺便介绍WP8 功能展示项目

    由于在项目中验证了C#Light脚本,C#Light的健壮和稳定程度已经得到了很大的提升. 现在可以更好的把C#Light介绍给大家使用,同时也有更多的自信,告诉大家这是一个已经具有商业价值的类库. ...

  3. [FPGA] 2、新建并运行一个工程

    上一篇将开发板的情况大致介绍了一下,这次将一步一步展示如何新建.调试并下载运行一个点亮LED的工程. 1)打开Quartus新建工程: 2)填写规则大致如下: 3)选择我们芯片的类型: 4)点击fil ...

  4. 换个角度理解云计算之MapReduce(二)

    接上篇 3.Combiner操作 前面讲完Map操作,总结一下就是:一个大文件,分成split1~5,对应于Map1~5,每一个Map处理一个split,每一个split的每一行,会用每一个Map的m ...

  5. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例

    引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...

  6. jQuery自动加载更多程序

    1.1.1 摘要 现在,我们经常使用的微博.微信或其他应用都有异步加载功能,简而言之,就是我们在刷微博或微信时,移动到界面的顶端或低端后程序通过异步的方式进行加载数据,这种方式加快了数据的加载速度,由 ...

  7. Git学习笔记(3)——撤销修改和文件的删除

    本文主要记录了git中,错误的撤销和文件的删除. 撤销修改 这里有3中情况 改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 不但改乱了工作区某个 ...

  8. java自定义注解实现前后台参数校验

    2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...

  9. MVVM架构~knockoutjs系列之数组的$index和$data

    返回目录 已经写了很多knockoutjs的文章了,今天在review代码时,忽然看到一个问题,在knockout环境下,如何遍历一个简单的数组?对于遍历对象组件的数组来说,很容易,直接foreach ...

  10. KnockoutJS 3.X API 第四章 数据绑定(4) 控制流with绑定

    with绑定的目的 使用with绑定的格式为data-bind="with:attribute",使用with绑定会将其后所跟的属性看作一个新的上下文进行绑定.with绑定内部的所 ...