top

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

posted @   桦仔  阅读(44001)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示