2013-10-04 104 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。 –