我们使用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中执行上述查询,则它会自动修剪左侧的额外空格,并仅生成给定单词的大小。
请在这方面回答我。
由于
答案 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