2013-10-04 57 views
1

存在具有重复值的列ID(varchar)。其中一些值具有尾随空格,我不希望在执行选择时看到这些空格。“删除”尾部空格后选择不同的空格

我想做一个“删除尾随空格后选择不同”。

我试了下面的代码,它没有帮助。输出中仍然有空格。

CREATE FUNCTION dbo.TRIM(@string VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) 
BEGIN 
RETURN LTRIM(RTRIM(@string)) 
END 
GO 
SELECT dbo.TRIM(' String ') 
GO 

然后,取自

select distinct dbo.trim(MyID) as Trimmed 
from dbo.SourceTbl 

码 - http://blog.sqlauthority.com/2013/01/23/sql-server-trim-function-to-remove-leading-and-trailing-spaces-of-string-sql-in-sixty-seconds-040-video/

+1

似乎为我工作。 'MyID'中你的价值是什么? – Brad

+2

你在哪里看到尾随空格? –

+2

被渲染为“空格”的字符是否实际上是空格而不是其他空格? –

回答

4

尝试这样的事情,也许?

SELECT DISTINCT trimmed 
FROM (
    SELECT RTRIM(LTRIM(MyID)) as trimmed 
    FROM dbo.SourceTbl 
) A 
0

你尝试创建功能使用REPLACE(@string,””, '')来代替? 这应该具有相同的效果(用空字符串替换空格)。

您也可以尝试在SELECT语句中使用RTRIM或REPLACE函数,而不是创建用户定义的函数。

+0

按照建议使用'REPLACE'还会去除字符串中的任何空格,而不仅仅是前导和/或尾随空格。 – HABO

-1
SELECT Distinct replace(Colum, ' ', '') AS Trimmed 
FROM Table 

DECLARE @String1 NVARCHAR(MAX) 
SET @String1 = ' String ' 
SELECT @String1 OriginalString, RTRIM(LTRIM(@String1)) TrimmedValue 
GO 

要创建一个函数来除去开头和结尾的空格

CREATE FUNCTION dbo.TRIM(@string VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) 
BEGIN 
RETURN LTRIM(RTRIM(@string)) 
END 
GO 


SELECT DISTINCT dbo.TRIM(' String ') 
GO 
+0

此函数将删除字符串中的任何空格,并且您可以从空白空白值/列中选择Distinct值。 :) –

+1

[空白](http://en.wikipedia.org/wiki/Whitespace_(计算机))包括空格,标签......,而此代码仅处理空格。还不清楚为什么在REPLACE()方法中使用循环时,它会替换单次调用中的所有事件。这也取代了字符串中的空格,尽管OP请求了一种方法来删除尾随(也可能是前导)空格。这是对Mark Dadisman先前答案的改进吗? – HABO

+0

Opsss我刚刚注意到你提到我真的不需要一个while循环这里。 REPLACE()函数确实替换所有的空格。我不知道为什么,但我认为它将取代第一个白色空间在多个空格的情况下。在这种情况下,我们甚至不需要udf。 –