【问题标题】:Select distinct after "removing" trailing spaces在“删除”尾随空格后选择不同的
【发布时间】:2013-10-08 07:02:43
【问题描述】:

有一个具有重复值的列 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/

【问题讨论】:

  • 似乎对我有用。你在MyID 中的价值观是什么?
  • 你在哪里看到尾随空格?
  • 被渲染为“空格”的字符实际上是空格而不是其他空格吗?

标签: sql sql-server sql-server-2008


【解决方案1】:

试试这样的,也许吧?

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

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • 此函数将删除字符串中的所有空格,您可以从无空格值/列中选择不同的值。 :)
    • Whitespace 包括空格、制表符等,而此代码仅处理空格。还不清楚为什么要在 REPLACE() 周围使用循环,因为它将替换单个调用中的所有事件。这也替换了字符串中的空格,尽管 OP 请求了一种删除尾随(可能还有前导)空格的方法。这对 mbomb 之前的答案有何改进?
    • Opsss 我现在才注意到,在你提到我这里真的不需要 while 循环之后。 REPLACE() 函数会替换单次出现的所有空格。我不知道为什么,但我认为它会在有多个空格的情况下替换第一个空格。在这种情况下,我们甚至不需要 udf。
    • 删除所有空格。我只需要前导和尾随空格、制表符、删除空格。
    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多