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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM