假設我有一個字符串1,2,3,
我想刪除最後的,
或者如果字符串看起來像,1,2,3,
或,1,2,3
我仍然想要得到1,2,3
作爲我的結果。 請在答案中儘量做一點解釋。我不只是想在不理解的情況下複製粘貼的東西。謝謝。如何從字符串中刪除特定字符,僅當它是字符串中的第一個或最後一個字符時。
回答
一種方式來應對「微調」這樣的逗號將使用CASE
聲明:
CASE
WHEN str LIKE ',%,' THEN SUBSTRING(str, 2, LEN(str)-2)
WHEN str LIKE ',%' THEN RIGHT(str, LEN(str)-1)
WHEN str LIKE '%,' THEN LEFT(str, LEN(str)-1)
ELSE str
END
這是非常不言自明:在CASE
聲明認爲三種情況 -
- 當字符串
str
雙方都有逗號時, - 當字符串
str
以逗號開頭,但不以1結尾, - 字符串
str
以逗號結尾,但不以1開頭。
在第一種情況下,第一個和最後一個字符被刪除;在第二種情況下,最左邊的字符被刪除;在最後一種情況下,尾隨字符被刪除。
你的解決方案在大多數情況下都能正常工作,但是如果我的字符串看上去像'1,2,3,'或'a,b,c ,,'怎麼辦?我知道這不太可能,但讓我們假設它會發生什麼呢? +1 btw – Arbaaz
@Arbaaz由於SQL Server 2008缺乏對正則表達式的「普通」支持,處理未知長度的字符序列是一個棘手的問題。你可以編寫你自己的函數,或者使用黑客方法:用空格替換逗號,在兩端修剪空格,最後再用逗號替換空格,就像這樣'REPLACE(LTRIM(RTRIM(REPLACE(str,',',') '))),'',',')'([demo](http://sqlfiddle.com/#!6/1fbef/1))。 **注意:**原始字符串必須*不包含空格才能使此黑客工作。 – dasblinkenlight
@Arbaaz,這不完全是你的公平。你的問題是具體處理第一個和/或最後一個字符。請更新您的問題的措辭,以便給出的答案可能更合適。 –
dept_name
是列名稱,'I'是您要替換的字符。
SELECT REPLACE(Dept_Name,'I','')
FROM [Newone].[dbo].[Department]
where Dept_Name like 'I%' or Dept_Name like '%I'
他只想要第一個和最後一個。 – Jade
CASE
就在這裏工作。我想是這樣的:
CASE
WHEN ISNUMERIC(RIGHT(YourString, 1)) <> 1 AND ISNUMERIC(LEFT(YourString, 1)) <> 1
THEN SELECT MID(YourString, 2, LEN(YourString) - 2)
WHEN ISNUMERIC(RIGHT(YourString, 1)) <> 1
THEN SELECT LEFT(YourString, LEN(YourString) -1)
WHEN ISNUMERIC(LEFT(YourString, 1)) <> 1
THEN SELECT RIGHT(YourString, LEN(YourString) - 1)
ELSE SELECT YourString
END
此作品無論性格就是因爲它檢查是否第一個和最後一個是數字第一,如果沒有得到你的新的字符串,否則檢查,看看是否如果沒有選擇除末尾之外的字符串,則末尾爲數字;否則,檢查開頭是否爲數字,如果不選擇除開頭以外的字符串,則還要獲取字符串。
declare @str varchar(20)=',1,2,3,'
select case
when @str like ',%,' then stuff(stuff(@str, 1, 1, ''),LEN(stuff(@str, 1, 1, '')),1,'')
when @str like ',%' then stuff(@str, 1, 1, '')
when @str like '%,' then stuff(@str, LEN(@str), 1, '')
else @str
end
如果您需要在開始或結束時再更換隻是一個逗號(,因爲它是在你原來的問題):
CASE
WHEN str LIKE '%,%' THEN
SUBSTRING(str, IIF(LEFT(str,1)=',',2,1),
LEN(str)-IIF(LEFT(str,1)=',',1,0)
-IIF(RIGHT(str,1)=',',1,0))
ELSE str
END
如果,,,,1,2,3,,,,
可以再使用PATINDEX()函數'%[0-9]%
面膜:
CASE
WHEN str LIKE '%,%' THEN
SUBSTRING(str, PATINDEX('%[0-9]%',str),
LEN(str)-(PATINDEX('%[0-9]%',str)-1)
-(PATINDEX('%[0-9]%',REVERSE(str))-1))
ELSE str
END
有幾個選項全部使用SQLCLR,如果這是你不被拒絕訪問的東西。您可以編寫自己的函數來完成這些工作,但我將展示的示例基於SQL# (SQLsharp)庫。我是SQL#庫的作者,但前兩個示例使用Free版本中提供的函數。使用TrimChars()的第三個例子不是免費的,但是爲了完整性,我將它包含在內,因爲它非常簡單;-)。在每個示例中,前或後額外逗號內的字符可以是任何內容。
一個稍微簡單的在一個捕獲組使用正則表達式通過的最後一個非逗號價值得到一切從第一非逗號值:
SELECT SQL#.RegEx_CaptureGroup(N',,12,123,12334,567,,,,,', N'^,*(.+?),*$', -- Regular Expression 1, -- Capture Group to return '', -- not found replacement 1, -- Start At position -1, -- Length '' -- RegEx Options )
如果去除的原因額外的逗號是要得到一個清晰的分割列表,你可以拆分它們並讓分割函數爲你刪除空值,因此不需要擔心空值在哪裏,即使在中間:
SELECT *FROM SQL#.String_Split(N',,12,123,12334,567,,,,,', N',', 2) -- 2 = remove empty values
你可以做一個簡單的修剪,消除雙方指定的字符,直到找到一個字符不修剪字符:
SELECT SQL#.String_TrimChars(N',,12,123,12334,567,,,,,', N',')
如果你只是想刪除一個結尾逗號,在SQL Server中,我會使用STUFF函數,它看起來像這樣:
SELECT STRING, stuff(string, (len(string) - 1),1,'') as newstring
from yourtable
試試這個。 REVERSE(SUBSTRING(REVERSE(fld),2,LEN(fld))) 無論如何,它總會佔用最後一個字符。 你可以放一個CASE WHEN語句,通過簡單地說CASE WHEN REVERSE(SUBSTRING(fld,1,1))=','then'REVERSE(SUBSTRING(REVERSE(fld),2,LEN(fld) )))ELSE fld END fld
- 1. 刪除字符串中的最後一個字符和第一個字符
- 2. 如何刪除特定字符後的字符串中的最後一個字
- 3. 如何從字符串中刪除第一個和最後一個字符
- 4. 動態刪除最後一個字符串後/從字符串
- 5. 字符串的第一個字符和最後一個字符
- 6. 當它是最後一個字符時刪除連字符
- 7. PHP:如何在一個字符串中刪除特定字符
- 8. Python:從第一個數字字符中刪除字符串
- 9. 刪除一個PHP字符串中的一組特定字符
- 10. 如何從字符串中刪除最後的n個字符?
- 11. 從一個字符串中刪除一個子字符串
- 12. 從字符串中刪除N個第一個字符
- 13. 從C字符串中剝離第一個字符和最後一個字符
- 14. 如何刪除PHP中的字符串的第一個字符?
- 15. Javascript:如何從div或字符串中刪除最後一個字符?
- 16. 如何從字符串中刪除/刪除最後一個字符php
- 17. 刪除字符串的第一個字符如果它等於
- 18. 刪除字符串中最後一個空格後的最後一個字符
- 19. 刪除XSLT字符串中的最後一個字符
- 20. 修剪字符串,刪除C中的最後一個字符#
- 21. 刪除動態字符串中的最後一個字符
- 22. AppleScript:刪除文本字符串中的最後一個字符
- 23. 刪除字符串中的最後一個「X」字符
- 24. 刪除XSLT url字符串中的最後一個字符
- 25. Objective C - 刪除字符串中的最後一個字符
- 26. 刪除字符串中的最後一個字符Livecode語言
- 27. 刪除python中字符串的最後一個字符
- 28. 從第二個字符串中刪除第一個字符串中所有字符的最有效方法?
- 29. cout:最後一個字符串覆蓋第一個字符串
- 30. VBA從字符串中刪除HTML標記僅刪除第一個字符
爲什麼你需要在字符串的開始或結尾刪除額外的逗號?我問,最終目標可能指向其他可能的解決方案。 –
我發送一個很長的字符串,看起來像'a,b,c'到我的存儲過程,我在'IN子句'中使用了這個字符串,我從後面的代碼中移除了最後一次逗號,我很好奇可以在SQL中做同樣的事情。 – Arbaaz
在SQL Server 2017中查看[TRIM](https://docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql)方法 – HuBeZa