Friday, July 22, 2011

SQL Server equivalent of TrimStart and TrimEnd

If you ever wanted an equivalent to .NET's String.TrimStart() and TrimEnd for SQL Server, here's two scalar functions that do the same thing.

-- =============================================
-- Author: DOTNETSAM
-- Create date: 07/22/2011
-- Description: Remove starting characters
-- =============================================
CREATE FUNCTION [dbo].[TrimStart]
(
@value VARCHAR(MAX),
@trimval CHAR(10)
)
RETURNS VARCHAR(MAX)
AS
-- TEST CASES
-- select dbo.[TrimStart](',1,2,3,,',',')
-- select dbo.[TrimStart]('1,2,3',',')
-- select dbo.[TrimStart]('1,2,3,',',')
-- select dbo.[TrimStart](',1,,',',')
-- select dbo.[TrimStart](',,1,,,',',')
-- select dbo.[TrimStart](',,1,,,',',,')
BEGIN
DECLARE @ReturnString AS VARCHAR(MAX)

IF(@trimval = LEFT(@value, LEN(@trimval))) --If trimmed val = 1st chars, then trimstart it
SET @ReturnString = SUBSTRING(@value,LEN(@trimval)+1,LEN(@value))
ELSE
SET @ReturnString = @value

RETURN @ReturnString
END

-- =============================================
-- Author: DotNetSam
-- Create date: 07/22/2011
-- Description: Remove ending characters
-- =============================================
CREATE FUNCTION [dbo].[TrimEnd]
(
@value VARCHAR(MAX),
@trimval CHAR(10)
)
RETURNS VARCHAR(MAX)
AS
-- TEST CASES
-- select dbo.[TrimEnd](',1,2,3,,',',')
-- select dbo.[TrimEnd]('1,2,3',',')
-- select dbo.[TrimEnd]('1,2,3,',',')
-- select dbo.[TrimEnd](',1,,',',')
-- select dbo.[TrimEnd](',,1,,,',',')
-- select dbo.[TrimEnd](',,1,,,',',,')
BEGIN
DECLARE @ReturnString AS VARCHAR(MAX)

IF(@trimval = RIGHT(@value, LEN(@trimval))) --If trimmed val = ending chars, then trimend it
SET @ReturnString = SUBSTRING(@value,0,LEN(@value)-LEN(@trimval)+1)
ELSE
SET @ReturnString = @value

RETURN @ReturnString
END