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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。