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

