SQL Server - RTRIM(LTRIM(列))不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server - RTRIM(LTRIM(列))不起作用相关的知识,希望对你有一定的参考价值。
我在修剪它们之后不断地从表中选择列,如下所示:
SELECT TOP 1 RTRIM(LTRIM([UN_DataIN])) FROM [Names]
这将返回名称Fadi
SELECT TOP 1 RTRIM(LTRIM([UN_DataIN])), LEN(RTRIM(LTRIM([UN_DataIN]))) FROM [Names]
当我选择修剪过的柱子的长度时,我会回到10。
这意味着RTRIM
和LTRIM
没有做好自己的工作。
他们有替代品吗?
答案
UN_DataIN == 0x45062706470631062920292029202920292029202000
所以假定阿拉伯语你的字符串以Unicode段落分隔符U + 2029结尾,然后是一个空格,你需要删除所有这些空格;
select rtrim(replace(UN_DataIN, nchar(0x2029), '')) + '!'
ماهر!
另一答案
这对我来说也可能是我的问题.. ^ - ^
select rtrim(ltrim(replace(replace(replace(colname,char(9),' '),char(10),' '),char(13),' ')))
from yourtable
来源:http://www.sqlservercentral.com/Forums/Topic288843-8-1.aspx
另一答案
我想你的田野文字中有一些新的线条。 RTRIM
和LTRIM
不能很好地处理这些问题。
另一答案
创建提供所需输出的函数,如下所示:
CREATE FUNCTION dbo.TRIM(@string VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
RETURN LTRIM(RTRIM(Regex_Replace(@string,'
','')));
END
GO
在这里,我们使用regex_replace
删除,如果检测到任何New Lines
,之后它将适用RTRIM
和LTRIM
现在您可以在查询中调用此TRIM函数:
SELECT TOP 1 dbo.TRIM([UN_DataIN]) FROM [Names];
另一答案
TRIM
所有SPACE
的TAB
和ENTER
:
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 + 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
)
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 @NewStr
END
Example
-- Test
DECLARE @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) + '"'
结果
+-------+----------------+
| Test | Result |
+-------+----------------+
| EMPTY | "" |
| EMTPY | "" |
| NULL | NULL |
| Str | "[ Foo ]" |
+-------+----------------+
资料来源:How to use a TRIM function in SQL Server
另一答案
如果最后有一个空格我的解决方法:
update tableName set PayeeName = PayeeName + '_Serengeti' where right(PayeeName,1) = ' '
update tableName set PayeeName = Replace(PayeeName,' _Serengeti','') where PayeeName like '%_Serengeti%'
如果您有许多空格,则可能需要执行语句,直到删除所有空格。
以上是关于SQL Server - RTRIM(LTRIM(列))不起作用的主要内容,如果未能解决你的问题,请参考以下文章