【SQL】靠谱的TRIM函数,附赠过程一枚

原文:【SQL】靠谱的TRIM函数,附赠过程一枚

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

文毕。

时间: 2024-11-07 15:03:37

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

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

1.sql trim()函数去掉两头空格sql语法中没有直接去除两头空格的函数,但有ltrim()去除左空格rtrim()去除右空格.合起来用就是sql的trim()函数,即select ltrim(rtrim(UsrName)) 另一种方法: replace( strSource, strFind, strReplaceAs ) strSource: 源字符串, 如:张 三.strFind: 要被替换的字符, 如: 空格.strReplaceAS: 替换成什么字符, 如: 长度为0的字符串.

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

SQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾.最常见的用途是移除字首或字尾的空白.这个函数在不同的资料库中有不同的名称: MySQL: TRIM( ), RTRIM( ), LTRIM( ) Oracle: RTRIM( ), LTRIM( ) SQL Server: RTRIM( ), LTRIM( ) 各种 trim 函数的语法如下: TRIM ( [ [位置] [要移除的字串] FROM ] 字串): [位置] 的可能值为 LEADING (起头), TRAILING (

SQL中的单记录函数

SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A         A      ZERO     SPACE--------- --------- --------- ---------       65        97        48        32 2.CHR给出整数,返回对应的字符;SQL> s

Sql总结之Sql--常用函数

控制流函数 IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境. mysql> select IFNULL(1,0); -> 1 mysql> select IFNULL(0,10); -> 0 mysql> select IFNULL(1/0,10); -> 10 mysql> select IFNULL(1/0,'yes')

oracle中的trim()函数详解

1.先看一下Oracle TRIM函数的完整语法描述 TRIM([ { { LEADING | TRAILING | BOTH }[ trim_character ]| trim_character}FROM]trim_source) 以上语法引自于Oracle 10gR2官方文档:http://download.oracle.com/docs/ ... 0/img_text/trim.htm单从这个语法定义上我们就可以看出,小小的Oracle TRIM函数蕴含了更多可定制的功能.一一展示,供参

oracle trim函数用法详解

在oracle数据库中,trim一般都是用在删除字符串两边的空格.实际上,trim也可以用来删除字符串两边的指定字符.并且trim指定删除的字符串只能是单个字符Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数有更深的认识. 如果提到Oracle TRIM函数,最简单的功能就是使用它来去除字符串的行首和行尾的空格,这个功能也是大家使用频率最高的一种.然而Oracle TRIM函数其实是具有删除“任意指定”字

【Leetcode】Swap Nodes in Pairs in JAVA 难得的一次写对不带改的。。附赠测试程序like always

Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the list, on

SQL 语句日期用法及函数

SQL 语句日期用法及函数 --DAY().MONTH().YEAR()——返回指定日期的天数.月数.年数:select day(cl_s_time) as '日' from class  --返回天select '月'=month(cl_s_time) from class  --返回月select '年'=year(cl_s_time) from class  --返回年 --DATEADD(datepart,number,date)——在日期上增加给定日期类型的数量:select date

练习使用Trim()函数规范名字输入

Java中的Trim()函数可以去除字符串的空白前缀和空白后缀,可用来规范用户输入的内容,具体这样用: String s="   Hello world  ".trim(); 然后s就是"Hello world". 处理名字输入小练: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class testTrim {