2017-07-11 21 views
0

的我們用RTRIM()修剪附加到任何字的右側任何多餘的空格。但在MS SQL Server 2012中,我發現SSMS會自動修剪任何單詞右側的任何多餘空格。請查找以下查詢以瞭解我們的案例。使用RTRIM()函數

查詢: -

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中這個上面的查詢,那麼所有多餘的空格都爲詞「不列顛尼亞」被自動刪除。所以,這意味着MS SQL server 2012正在使RTRIM()功能無用。 RTRIM()在這裏似乎沒用。 我嘗試過以前的版本,並找到相同的結果。

我在蟾蜍應用程序檢查運行Oracle 10g中,我發現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這上面的查詢,然後它會自動修整向左和生產只給定字的大小多餘的空格。

請回答我在這方面。

感謝

+2

[的VARCHAR與行爲空格在最後](https://dba.stackexchange.com/questions/10510/behavior-of-varchar-with-spaces-at-the-end) –

回答

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