回答
該函數返回的字符串長度的2倍,其中包括空間,對於一個nvarchar:
DATALENGTH(@variable)
所以LEFT(@variable, LEN(@variable))
和RIGHT(@variable, DATALENGTH(@variable)/2 - LEN(@variable))
應該工作。
我從你的使用nvarchar
,這是SQL Server的假設......在例如
戰利品:
DECLARE @js NVARCHAR(MAX) = N'John Smith '
SELECT CASE WHEN RIGHT(@js, 1) = NCHAR(32) THEN SUBSTRING(@js, 1, DATALENGTH(@js)/2-1) ELSE @js END JohnSmith,
CASE WHEN RIGHT(@js, 1) = NCHAR(32) THEN NCHAR(32) ELSE N'' END Space
爲什麼NCHAR(32),我不知道填充的長度和字長 – AMH 2012-01-11 11:04:59
NCHAR(32)是空格字符。但你是對的,這不涉及除1之外的任何長度的填充。 – 2012-01-11 11:18:41
你需要將最後一個空間與其他空間分開 - 我做了它,如果你想分割成字符串和它的尾部空間 - 然後我'我會寫信給你。其他。在你的問題中具體和確切 – 2012-01-11 11:22:54
內的查詢,請嘗試:
...
rtrim(MyColumn) NoTrailingSpaces,
right(MyColumn, len(MyColumn) - len(rtrim(MyColumn))) TrailingSpacesOnly,
...
- 從數據中刪除填充。更換填充字符如果你喜歡
DECLARE @js varchar(50)
DECLARE @M INT
DECLARE @I INT
DECLARE @C CHAR
DECLARE @WORD VARCHAR(50)
DECLARE @LPAD VARCHAR(50)
DECLARE @RPAD VARCHAR(50)
DECLARE @LEFT_PADDING_CHARACTER CHAR
DECLARE @RIGHT_PADDING_CHARACTER CHAR
DECLARE @TERMINATOR_CHARACTER CHAR
-- INIT THE STRINGS
SELECT @LPAD = ''
SELECT @RPAD = ''
SELECT @WORD = ''
SELECT @LEFT_PADDING_CHARACTER = ' '
SELECT @RIGHT_PADDING_CHARACTER = ' '
SELECT @TERMINATOR_CHARACTER = '~'
SELECT @js = ' John Smith '
SELECT @js = @js + @TERMINATOR_CHARACTER -- ADD TO CALC THE LENGTH
SELECT @I = 1 -- FIRST CHARACTER
SELECT @M = LEN(@JS) -- LAST CHARACTER
WHILE @I < @M -- PARSE OUT THE LEFT PADDING
BEGIN
SELECT @C = SUBSTRING(@js, @I, 1)
IF @C = @LEFT_PADDING_CHARACTER SELECT @LPAD = @LPAD + @C
ELSE GOTO PARSERIGHTPADDING
SELECT @I = @I + 1
END
PARSERIGHTPADDING:
SELECT @I = LEN(@JS) -1 -- POINT TO THE LAST CHAR
SELECT @M = 1 -- POINT TO THE FIRST CHAR
SELECT @js = LTRIM(@JS) -- TRIM OFF THE LEFT PADDING
SELECT @js = REPLACE(@js, @TERMINATOR_CHARACTER, '' -- TRIM OFF THE TERMINATOR
WHILE @M < @I -- PARSE OUT THE RIGHT PADDING
BEGIN
SELECT @C = SUBSTRING(@js, @I, 1)
IF @C = @RIGHT_PADDING_CHARACTER SELECT @RPAD = @RPAD + @C
ELSE GOTO REMOVEPADDINGS
SELECT @I = @I - 1
END
REMOVEPADDINGS:
SELECT @WORD = LTRIM(RTRIM(@js))
-- SELECT THE RESULTS TO VIEW THEM @LPAD AND @RPAD SHOULD BE BLANK
SELECT @LPAD [LPAD], @WORD [WORD], @RPAD [RPAD]
- 1. 左側有jQuery動畫。獲取當前左側位置
- 2. Delphi獲取關於窗體左側的控制起點
- 3. SQL - 左側沒有空加入
- 4. SherlockActionBar從徽標左側獲取空間
- 5. SQL查詢來獲取一個二進制左側或右側位置
- 6. SQL長度,左側,右側新列
- 7. PHP SQL左連接獲取所有
- 8. 提取關鍵術語的左側和右側的單詞
- 9. SQL左側加入問題
- 10. 關閉Snackbar左側滑動
- 11. 在sql中獲取字符串左側分隔符的所有字符
- 12. 關閉屏幕導航 - 右側和左側 - 只有css
- 13. SQL僅從varchar獲取數值(子串)
- 14. 提取文本的左側「 - 」
- 15. 如何獲取活動上的右/左箭頭以指示右側/左側有更多屏幕?
- 16. 像左側加入SQL Server的左連接左加入(+)
- 17. 左側沒有新變量:=
- 18. jquery slideUp()向左側
- 19. 獲取varchar的一部分的最後一個單詞(左/右)
- 20. 使用IF語句獲取取決於左側的所有領域JOIN
- 21. 左側具有聚合函數的SQL查詢加入一對多關係
- 22. 無效左側
- 23. SQL左側的接合部3個表
- 24. 響應式左側欄打開關閉
- 25. 獲得從字符串幾句左側和關鍵字
- 26. CSS左側和右側
- 27. Prestodb map(varchar,varchar):如何獲取所有可能的密鑰?
- 28. SQL獲取所有相關行
- 29. 加入左側和右側
- 30. divs在左側和右側
SQL Server有功能LTRIM(字符串),RTRIM()和SPLIT()functions.It可以在像MySQL或Oracle等SQL執行有所不同,但它們很可能也有類似的功能。 – Acn 2012-01-11 10:27:18
哪個RDBMS? MS SQL Server,還是其他?許多字符串函數都是特定於平臺的。 – 2012-01-11 10:28:09