SQLSERVER中使用函数去掉数据中的空格
SQLSERVER中使用函数去掉数据中的空格
某天查询两个表的数据,用一个inner join联接来找出两个表中NAME相同的记录,但是在查找过程中发现
有一些记录select不出来
我这里用A表和B表来代替我那天的两个表,然后插入一些数据模拟那两个表中的情况
1 USE [pratice] 2 GO 3 CREATE TABLE A(ID INT,NAME NVARCHAR(200)) 4 GO 5 CREATE TABLE B(ID INT,NAME NVARCHAR(200)) 6 GO 7 8 -------------------------------------- 9 INSERT INTO [dbo].[A] ( [ID], [NAME] ) 10 SELECT 1,' 你好1 ' UNION ALL --name值两边有空格 11 SELECT 2,'你好2 ' UNION ALL --name值右边有空格 12 SELECT 3,' 你好3' UNION ALL --name值左边有空格 13 SELECT 4,'你好4' --name值两边没有空格 14 15 INSERT INTO [dbo].[B] ( [ID], [NAME] ) 16 SELECT 1,'你好1' UNION ALL 17 SELECT 2,'你好2' UNION ALL 18 SELECT 3,'你好3' UNION ALL 19 SELECT 4,'你好4'
我在A表中插入了4种情况的记录,分别是:name值两边有空格,name值右边有空格,name值左边有空格,name值两边没有空格
然后我用inner join找出两个表中NAME相同的记录,发现有些记录select不出来
1 SELECT * FROM [dbo].[A] AS a INNER JOIN [dbo].[B] AS b ON a.[NAME]=b.[NAME] ORDER BY [a].[NAME] ASC
只有id为2,4这两条记录select出来了
我把两个表中的记录select出来,当然实际情况是表中记录非常多
1 SELECT * FROM [dbo].[A] 2 SELECT * FROM [dbo].[B]
我是怎麽找出端砚的??本人刚开始觉得不对劲,就用下图的方法把A表中的记录放到SSMS里查询窗口中,大家可以看一下下面的图片
就这样,把表中的数据copy到查询窗口的单引号字符中'' ,可以看出A表中某些数据两边是有空格的,某些数据一边是有空格的,而B表中
数据都没有空格,我才发现了这个规律
然后我上网查找了一下msdn和网上的资料,看SQLSERVER有没有像C#那样的trim函数,结果发现没有。
后来在博客园里发现一篇博客
sql语法中没有直接去除两头空格的函数,但有ltrim()去除左空格rtrim()去除右空格。
合起来用就是sql的trim()函数,即select ltrim(rtrim(UsrName))
将SQL改写成这样
1 SELECT * 2 FROM [dbo].[A] AS a 3 INNER JOIN [dbo].[B] AS b ON LTRIM(RTRIM(a.[NAME])) = LTRIM(RTRIM(b.[NAME])) 4 ORDER BY [a].[NAME] ASC
能顺利查出结果了
后来发现用like关键字也可以
1 SELECT * 2 FROM [dbo].[A] ,[dbo].[B] WHERE [A].[NAME] LIKE '%'+[B].[NAME]+'%'