数据库之SQL SERVER中使用函数去掉结果数据中的空格

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]+'%'


感谢http://www.cnblogs.com/lyhabc/articles/3215342.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值