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

简介: 原文:【SQL】靠谱的TRIM函数,附赠过程一枚SQL中有LTRIM和RTRIM这两个函数分别用于去除字符串的首、尾空格,缺乏常见的能同时去除首尾的TRIM函数,另外,这俩函数都只对【空格】有效,所以如果首尾是制表符、换行符等等【空白】,它们是不处理的~起码到sql 2k8 r2仍然如此。
原文: 【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

文毕。

目录
相关文章
|
3月前
|
SQL 人工智能 数据挖掘
如何在`score`表中正确使用`COUNT`和`AVG`函数?SQL聚合函数COUNT与AVG使用指南
本文三桥君通过score表实例解析SQL聚合函数COUNT和AVG的常见用法。详解COUNT(studentNo)、COUNT(score)、COUNT()的区别,以及AVG函数对数值/字符型字段的不同处理,特别指出AVG()是无效语法。实战部分提供6个典型查询案例及结果,包含创建表、插入数据的完整SQL代码。产品专家三桥君强调正确理解函数特性(如空值处理、字段类型限制)对数据分析的重要性,帮助开发者避免常见误区,提升查询效率。
258 0
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
206 3
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
2337 5
|
SQL 数据采集 数据处理
如何在 SQL Server 中使用 LEN 函数
【8月更文挑战第9天】
584 1
如何在 SQL Server 中使用 LEN 函数
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
SQL 关系型数据库 MySQL
SQL日期函数
SQL日期函数
226 0
|
SQL 数据处理 数据库
SQL中的函数有哪些类型
【8月更文挑战第20天】SQL中的函数有哪些类型
311 1
|
SQL 数据处理 数据库