[英]T-SQL select special characters from nvarchar field
我正在尋找一個select語句,在其中可以優化nvarchar字段中的值。 例如:輸入值為'!ab>c2 ghf5 ksj@_+wwl9'
,輸出必須為'abc ghf ksjwwl'
。 如何使用SQL正則表達式或其他方法刪除文本中的一些多余字符?
我不知道這是否有幫助,但是您可以定義一個包含所有要替換的字符/短語的表,並像這樣進行操作:
DECLARE @CharsToReplace TABLE(SearchFor VARCHAR(100),ReplaceWith VARCHAR(100));
INSERT INTO @CharsToReplace VALUES('1',''),('2',''),('3',''),('4',''),('5',''),('6',''),('7',''),('8',''),('9',''),('0','');
DECLARE @YourString VARCHAR(100)='abc2 ghf5 ksjwwl9';
SELECT @YourString=REPLACE(@YourString,SearchFor,ReplaceWith)
FROM @CharsToReplace;
SELECT @YourString;
結果
abc ghf ksjwwl
如果您要在ReplaceWith
定義值,這也將起作用。
注意 :這會很慢!
CREATE FUNCTION dbo.DeleteChars(@CharList NVARCHAR(MAX),@string NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @List XML=(SELECT CAST('<x>'+ REPLACE(@CharList,',','</x><x>')+'</x>' AS XML));
SELECT @string=REPLACE(@string,ch.value(N'.',N'nvarchar(max)'),'')
FROM @List.nodes('/x') AS A(ch);
RETURN @string;
END
GO
-用模型表測試
DECLARE @SomeTable TABLE(SomeColumn VARCHAR(100));
INSERT INTO @SomeTable VALUES('abc2 ghf5 ksjwwl9'),('123 abc 456 hello');
-這是字符列表(以逗號分隔)
DECLARE @CharList VARCHAR(100)='1,2,3,4,5,6,7,8,9,0';
-這就是你的稱呼
SELECT dbo.DeleteChars(@CharList,SomeColumn)
FROM @SomeTable
GO
- 清理
DROP FUNCTION dbo.DeleteChars;
結果
abc ghf ksjwwl
abc hello
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.