How to use a TRIM function in SQL Server How to use a TRIM function in SQL Server sql-server sql-server

How to use a TRIM function in SQL Server


You are missing two closing parentheses...and I am not sure an ampersand works as a string concatenation operator. Try '+'

SELECT dbo.COL_V_Cost_GEMS_Detail.TNG_SYS_NR AS [EHP Code], dbo.COL_TBL_VCOURSE.TNG_NA AS [Course Title], LTRIM(RTRIM(FCT_TYP_CD)) + ') AND (' + LTRIM(RTRIM(DEP_TYP_ID)) + ')' AS [Course Owner]


TRIM all SPACE's TAB's and ENTER's:

DECLARE @Str VARCHAR(MAX) = '                [         Foo    ]                 'DECLARE @NewStr VARCHAR(MAX) = ''DECLARE @WhiteChars VARCHAR(4) =      CHAR(13) + CHAR(10) -- ENTER    + CHAR(9) -- TAB    + ' ' -- SPACE;WITH Split(Chr, Pos) AS (    SELECT          SUBSTRING(@Str, 1, 1) AS Chr        , 1 AS Pos    UNION ALL    SELECT          SUBSTRING(@Str, Pos, 1) AS Chr        , Pos + 1 AS Pos    FROM Split    WHERE Pos <= LEN(@Str))SELECT @NewStr = @NewStr + ChrFROM SplitWHERE    Pos >= (        SELECT MIN(Pos)        FROM Split        WHERE CHARINDEX(Chr, @WhiteChars) = 0    )    AND Pos <= (        SELECT MAX(Pos)        FROM Split        WHERE CHARINDEX(Chr, @WhiteChars) = 0    )SELECT '"' + @NewStr + '"'

As Function

CREATE FUNCTION StrTrim(@Str VARCHAR(MAX)) RETURNS VARCHAR(MAX) BEGIN    DECLARE @NewStr VARCHAR(MAX) = NULL    IF (@Str IS NOT NULL) BEGIN        SET @NewStr = ''        DECLARE @WhiteChars VARCHAR(4) =              CHAR(13) + CHAR(10) -- ENTER            + CHAR(9) -- TAB            + ' ' -- SPACE        IF (@Str LIKE ('%[' + @WhiteChars + ']%')) BEGIN            ;WITH Split(Chr, Pos) AS (                SELECT                      SUBSTRING(@Str, 1, 1) AS Chr                    , 1 AS Pos                UNION ALL                SELECT                      SUBSTRING(@Str, Pos, 1) AS Chr                    , Pos + 1 AS Pos                FROM Split                WHERE Pos <= LEN(@Str)            )            SELECT @NewStr = @NewStr + Chr            FROM Split            WHERE                Pos >= (                    SELECT MIN(Pos)                    FROM Split                    WHERE CHARINDEX(Chr, @WhiteChars) = 0                )                AND Pos <= (                    SELECT MAX(Pos)                    FROM Split                    WHERE CHARINDEX(Chr, @WhiteChars) = 0                )        END    END    RETURN @NewStrEND

Example

-- TestDECLARE @Str VARCHAR(MAX) = '                [         Foo    ]                     'SELECT 'Str', '"' + dbo.StrTrim(@Str) + '"'UNION SELECT 'EMPTY', '"' + dbo.StrTrim('') + '"'UNION SELECT 'EMTPY', '"' + dbo.StrTrim('      ') + '"'UNION SELECT 'NULL', '"' + dbo.StrTrim(NULL) + '"'

Result

+-------+----------------+| Test  | Result         |+-------+----------------+| EMPTY | ""             || EMTPY | ""             || NULL  | NULL           || Str   | "[   Foo    ]" |+-------+----------------+


LTRIM(RTRIM(FCT_TYP_CD)) & ') AND (' & LTRIM(RTRIM(DEP_TYP_ID)) & ')'

I think you're missing a ) on both of the trims. Some SQL versions support just TRIM which does both L and R trims...