dyn*_*ous 21 sql t-sql sql-server string
我傻眼了,这个问题还没有被有意义地问过.如何在SQL中创建等效函数,LTRIM或仅RTRIM用于回车和换行,仅在字符串的开头或结尾处.
显然REPLACE(REPLACE(@MyString,char(10),''),char(13),'')删除所有回车和新换行.这不是我想要的.我只是想删除前导或尾随的.
Ano*_*non 27
找到第一个不是 CHAR(13)或CHAR(10)从字符串长度中减去其位置的字符.
LTRIM()
SELECT RIGHT(@MyString,LEN(@MyString)-PATINDEX('%[^'+CHAR(13)+CHAR(10)+']%',@MyString)+1)
Run Code Online (Sandbox Code Playgroud)
RTRIM()
SELECT LEFT(@MyString,LEN(@MyString)-PATINDEX('%[^'+CHAR(13)+CHAR(10)+']%',REVERSE(@MyString))+1)
Run Code Online (Sandbox Code Playgroud)
sql*_*ser 10
以下功能是trim您可以使用的增强型功能.复制自sqlauthority.com
这些函数删除尾随空格,前导空格,空格,制表符,回车符,换行符等.
向左修剪
CREATE FUNCTION dbo.LTrimX(@str VARCHAR(MAX)) RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @trimchars VARCHAR(10)
SET @trimchars = CHAR(9)+CHAR(10)+CHAR(13)+CHAR(32)
IF @str LIKE '[' + @trimchars + ']%' SET @str = SUBSTRING(@str, PATINDEX('%[^' + @trimchars + ']%', @str), 8000)
RETURN @str
END
Run Code Online (Sandbox Code Playgroud)
修剪正确
CREATE FUNCTION dbo.RTrimX(@str VARCHAR(MAX)) RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @trimchars VARCHAR(10)
SET @trimchars = CHAR(9)+CHAR(10)+CHAR(13)+CHAR(32)
IF @str LIKE '%[' + @trimchars + ']'
SET @str = REVERSE(dbo.LTrimX(REVERSE(@str)))
RETURN @str
END
Run Code Online (Sandbox Code Playgroud)
左右修剪
CREATE FUNCTION dbo.TrimX(@str VARCHAR(MAX)) RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN dbo.LTrimX(dbo.RTrimX(@str))
END
Run Code Online (Sandbox Code Playgroud)
使用功能
SELECT dbo.TRIMX(@MyString)
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 2017 中,您可以使用该TRIM函数一次性从头到尾删除特定字符:
WITH testdata(str) AS (
SELECT CHAR(13) + CHAR(10) + ' test ' + CHAR(13) + CHAR(10)
)
SELECT
str,
TRIM(CHAR(13) + CHAR(10) + CHAR(9) + ' ' FROM str) AS [trim cr/lf/tab/space],
TRIM(CHAR(13) + CHAR(10) FROM str) AS [trim cr/lf],
TRIM(' ' FROM str) AS [trim space]
FROM testdata
Run Code Online (Sandbox Code Playgroud)
结果:
请注意,最后一个示例(修剪空格)没有按预期执行任何操作,因为空格位于中间。