使用RTRIM()函数

时间:2017-07-11 14:21:33

标签: sql-server

我们使用RTRIM()修剪附加到任何单词右侧的任何额外空格。但是在MS SQL server 2012中,我发现SSMS会自动修剪任何单词右侧的任何多余空格。请查看以下查询以了解我们的案例。

查询: -

DECLARE @INPUT AS TABLE
(
NAME VARCHAR(20),
PRODUCTID INT,
SHIP_DATE DATETIME
)

INSERT INTO @INPUT(NAME,PRODUCTID,SHIP_DATE) VALUES('BRITANIA    ',1,'2017-07-08')
INSERT INTO @INPUT(NAME,PRODUCTID,SHIP_DATE) VALUES('    NESTLE',2,'08-07-2017')

--SELECT * FROM @INPUT

SELECT RTRIM(LTRIM(NAME)),LEN(RTRIM(LTRIM(NAME))),NAME, LEN(NAME) FROM @INPUT

SELECT 'BRITANIA     ',LEN('BRITANIA   ')

如果在MS SQL Server 2012中运行以上查询,则会自动删除“BRITANIA”一词的所有额外空格。因此,这意味着MS SQL Server 2012正在使RTRIM()函数无效。 RTRIM()在这里似乎毫无用处。 我尝试过以前的版本并发现了相同的结果。

我检查了运行Oracle 10g的Toad应用程序,发现RTRIM()正常工作。

SELECT RTRIM(LTRIM(NAME)),LEN(RTRIM(LTRIM(NAME))),NAME, LEN(NAME) FROM DUAL

您能否解释一下为什么SSMS为RTRIM()函数生成此类输出且没有RTRIM()函数?

SELECT 'BRITANIA     ',LEN('BRITANIA     ') AS [WITHOUT RTRIM], LEN(RTRIM('BRITANIA     ')) AS [WITH RTRIM]

如果在MS SQL server 2012中执行上述查询,则它会自动修剪左侧的额外空格,并仅生成给定单词的大小。

请在这方面回答我。

由于

1 个答案:

答案 0 :(得分:0)

如上所述,行为正常: https://dba.stackexchange.com/questions/10510/behavior-of-varchar-with-spaces-at-the-end

对于您的测试,请提及

之间的区别
  

LEN()   “返回指定字符串表达式的字符数,   不包括尾随空白“

  

DATALENGTH()   “返回用于表示任何表达式的字节数”

您可以使用此SQL检查它:

SELECT 'BRITANIA     '
      ,LEN('BRITANIA   ')               AS LEN_function
      ,DATALENGTH('BRITANIA   ')        AS Datalength_function
UNION ALL
SELECT RTRIM('BRITANIA     ')
      ,LEN(RTRIM('BRITANIA   '))        AS LEN_function
      ,DATALENGTH(RTRIM('BRITANIA   ')) AS Datalength_function